Изменение вашей модели не требуется, и на самом деле это плохая практика (добавление логики представления, специфичной для администратора, в ваши модели? Блин!) В некоторых сценариях это может быть даже невозможно.
К счастью, все это может быть достигнуто с помощью класса ModelAdmin:
from django.urls import reverse
from django.utils.safestring import mark_safe
class PageAdmin(admin.ModelAdmin):
# Add it to the list view:
list_display = ('name', 'user_link', )
# Add it to the details view:
read_only_fields = ('user_link',)
def user_link(self, obj):
return mark_safe('<a href="{}">{}</a>'.format(
reverse("admin:auth_user_change", args=(obj.user.pk,)),
obj.user.email
))
user_link.short_description = 'user'
admin.site.register(Page, PageAdmin)
Изменить 2016-01-17:
Обновлен ответ для использования make_safe
, поскольку allow_tags
устарело.
Изменить 2019-06-14:
Обновленный ответ для использования django.urls
, поскольку начиная с Django 1.10 django.core.urls
устарел.