You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 01:51:11