Сделайте ссылку на объект внешнего ключа на экране администратора
У меня есть такой класс, в котором есть ForeignKey
class MyLog(SafeDeleteModel):
user = models.ForeignKey(CustomUser,on_delete=models.CASCADE)
То есть я указан пользователем MyLog на странице администратора.
class MyLogAdmin(admin.ModelAdmin):
list_display = ["id","user"]
class UserAdmin(admin.ModelAdmin):
list_display = ["id","username"]
Теперь я хочу сделать ссылку на пользователя страницы MyLogAdmin на UserAdmin,
Возможно ли это?
Я думаю, что в некоторых фреймворках (например, php symfony) система администратора делает это автоматически.
Как это можно сделать с помощью администратора django?
Это, как ни странно, не встроенная функция. Но мы можем эффективно сделать это сами с помощью:
from django.utils.html import format_html
class MyLogAdmin(admin.ModelAdmin):
list_display = ['id', 'username_link']
@admin.display(ordering='user__username', description='User')
def username_link(self, obj):
return format_html(
'<a href="{}"></a>',
reverse(
'admin:appname_customuser_change',
kwargs={'object_id': obj.user_id},
),
obj.user,
)
с appname
именем приложения, в котором вы определили CustomUser
модель (которая не сама по себе такая же, как MyLog
модель).
Note: It is normally better to make use of the
settings.AUTH_USER_MODEL
[Django-doc] to refer to the user model, than to use theUser
model [Django-doc] directly. For more information you can see the referencing theUser
model section of the documentation.
Note: We can boost efficiency by fetching the details of related models in the same query in a
ModelAdmin
with the.list_select_related
attribute [Django-doc]. In this specific case this thus looks like:class MyLogAdmin(admin.ModelAdmin): list_select_related = ['user'] # …