【问题标题】:Django - Foreign Keys and the Admin PageDjango - 外键和管理页面
【发布时间】:2020-03-27 21:08:15
【问题描述】:

我正在尝试在管理员更改页面(即www.some.url/admin/<app>/<model>/<id>/change/ 页面)上显示外键关系:

我有两个模型通过外键关系链接在一起,如下所示:

# models.py

class Bank(models.Model):
    name = models.CharField(max_length=100)

class Branch(models.Model):
    bank = models.ForeignKey('Bank', on_delete=models.CASCADE, related_name='branches')
    name = models.CharField(max_length=100)

我有一个像这样的模型管理员:

# admin.py

class BankAdmin(admin.ModelAdmin):

    list_display = ('id', 'name',)

如何在 django-admin-change 页面上添加与给定银行关联的分行列表?我可以在我的 BankAdmin 类中添加一些东西来实现这一点吗?

即如果我要访问管理页面并单击银行实例(即www.some.url/admin/<app>/bank/2/change/),我想查看银行的名称及其所有与外键相关的分支机构。

我一直在搜索 stackoverflow,但找到了解决方案 - 如果确实存在,请指出正确的方向。

【问题讨论】:

    标签: python django


    【解决方案1】:

    一种解决方案是在 BankAdmin 的列表显示中注册一个链接,该链接指向显示该银行分行的自定义管理视图。你可以这样做:

    # admin.py
    
    class BankAdmin(admin.ModelAdmin):
    
        def link_branches(self, obj):
            return format_html(
                "<a href='/admin/<app>/bank/branches/?id={ bank_id }'> Branches </a>",
                bank_id=obj.id
            )
    
        list_display = ('id', 'name', 'link_branches')
        admin.site.register(Bank, BankAdmin)
    

    然后您只需创建自定义视图并更新您的 urls.py 以将 /admin/&lt;app&gt;/bank/branches 指向该视图。

    【讨论】:

    • 谢谢 - 但这只会更新管理员列表页面而不是管理员更改页面。不确定我是否在问题中明确表示。
    • 啊,我读过了,对不起。我现在知道了。我认为您正在寻找修改 Django 在 ModelAdmin 的添加/更改页面上使用的表单。您可以创建新表单或修改默认表单。所以我想你需要修改现有的并添加一个显示链接分支的字段。 See here
    猜你喜欢
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 2011-11-25
    • 1970-01-01
    • 2018-09-15
    • 2012-01-19
    • 1970-01-01
    相关资源
    最近更新 更多