如何在Django Admin的MyLog列表中为ForeignKey字段User添加跳转链接?
Django Admin实现ForeignKey字段列表页跳转链接
完全可行,Django Admin支持将列表页中的ForeignKey字段设置为跳转至关联模型Admin页面的链接,以下是两种常用实现方式:
方法一:自定义字段方法(兼容所有Django版本)
在MyLogAdmin中定义一个生成链接的方法,替换list_display中的user字段:
from django.utils.html import format_html from django.urls import reverse from django.contrib import admin class MyLogAdmin(admin.ModelAdmin): list_display = ["id", "user_link"] def user_link(self, obj): # 生成CustomUser的Admin编辑页URL,需替换appname为你的应用名称 url = reverse("admin:appname_customuser_change", args=[obj.user.id]) return format_html('<a href="{}">{}</a>', url, obj.user) # 设置列表页的列显示名称为"user" user_link.short_description = "user"
方法二:使用admin.display装饰器(Django 3.2+)
利用Django 3.2新增的装饰器简化代码:
from django.utils.html import format_html from django.urls import reverse from django.contrib import admin class MyLogAdmin(admin.ModelAdmin): list_display = ["id", "user_link"] @admin.display(description="user") def user_link(self, obj): url = reverse("admin:appname_customuser_change", args=[obj.user.id]) return format_html('<a href="{}">{}</a>', url, obj.user)
注意事项
- 需确保
CustomUser已通过UserAdmin注册到Admin后台(即执行过admin.site.register(CustomUser, UserAdmin))。 - 代码中的
appname需要替换为你的CustomUser模型所在的应用名称,比如如果模型在accounts应用下,就写accounts。
内容的提问来源于stack exchange,提问作者whitebear
相关产品推荐
相关产品推荐

