在Admin中将Django Readonly ForeignKey字段渲染为链接

Cer*_*rin 11 python django django-admin

我在Django的管理员中有一个模型,它使用ModelAdmin的readonly_fields列表来显示一个"user"字段,这是一个链接到Django用户模型的ForiegnKey.默认情况下,readonly_fields会将此字段呈现为包含用户电子邮件的简单文本(例如someuser@domain.com).如何将其更改为呈现为该用户的关联管理页面的链接?(例如<a href="/admin/auth/user/123/">someuser@domain.com</a>)

Cer*_*rin 34

深入研究源代码,我发现你基本上可以将自己的字段定义为ModelAdmin子类中的方法,并且只需从方法中返回链接html即可将字段呈现为链接.

例如

from django.contrib import admin
from django.utils.safestring import mark_safe
from django.core import urlresolvers

class MyModelAdmin(admin.ModelAdmin):

    readonly_fields = ['user_link']

    def user_link(self, obj):
        change_url = urlresolvers.reverse('admin:auth_user_change', args=(obj.user.id,))
        return mark_safe('<a href="%s">%s</a>' % (change_url, obj.user.email))
    user_link.short_description = 'User'
Run Code Online (Sandbox Code Playgroud)

  • 执行``user_link.allow_tags = True``而不是mark_safe,然后此方法也适用于更改列表. (7认同)
  • 这实际上是记录在案,尽管是间接的:对于`部分readonly_fields`说,"表现几乎相同ModelAdmin.list_display",并链接到`list_display`在自定义方法选项定义. (2认同)
  • 如果你链接到另一种类型,通常是`urlresolvers.reverse('admin:&lt;app&gt;_&lt;type&gt;_change', ...)`。用适当的字符串替换 &lt;app&gt; 和 &lt;type&gt;。 (2认同)