Django Admin页面添加外键关联对象列表跳转链接问题
解决Django Admin中Database列表跳转对应DatabaseUser列表的问题
针对你的场景,直接在DatabaseAdmin里新增一个自定义字段,生成带过滤条件的Admin列表链接即可,具体修改如下:
1. 导入必要模块
在admin.py顶部添加:
from django.urls import reverse from django.utils.html import format_html
2. 修改DatabaseAdmin类
在DatabaseAdmin中添加自定义方法,并更新list_display:
class DatabaseAdmin(admin.ModelAdmin): form = PasswordInput fieldsets = [ ("Allgemein", {"fields": ["datenbank_name", "datenbank_art", "kunde", "host", "port"]}), ("Anmeldeinformationen", {"fields": ["user_name", "passwort"]}), ] # 把自定义方法加入列表显示字段 list_display = ["datenbank_name", "kunde", "datenbank_art", "port", "erreichbar", "show_database_users"] def show_database_users(self, obj): # 生成DatabaseUser的列表路由,注意替换成你自己的app名称(比如你的app叫'myapp'就写'myapp') changelist_url = reverse("admin:your_app_name_databaseuser_changelist") # 拼接过滤参数,对应DatabaseUser的外键字段datenbank filtered_url = f"{changelist_url}?datenbank={obj.id}" # 返回可点击的HTML链接 return format_html('<a href="{}">查看关联用户</a>', filtered_url) # 给自定义字段设置显示名称 show_database_users.short_description = "关联用户"
关键说明
- 路由名格式:Django Admin的列表页路由规则是
admin:<app_label>_<model_name>_changelist,你需要把your_app_name替换成你实际的应用名称(比如模型所在的app叫dbmanager,就改成dbmanager_databaseuser_changelist)。 - 过滤参数:因为你已经在
DatabaseUserAdmin里设置了list_filter = ["datenbank"],所以用?datenbank=obj.id就能自动过滤出当前Database对应的所有DatabaseUser。 format_html:用来渲染HTML链接,避免Django自动转义成纯文本。
修改后重启Django服务,进入Database的Admin列表,就能看到新增的「关联用户」列,点击链接就会跳转到过滤后的DatabaseUser列表页了。
内容的提问来源于stack exchange,提问作者carl_3000
相关产品推荐
相关产品推荐

