在 Django 管理员中,有没有办法显示模型的一对多对象的实际链接列表?

Posted

技术标签:

【中文标题】在 Django 管理员中,有没有办法显示模型的一对多对象的实际链接列表?【英文标题】:In the Django admin, is there a way to show a list of actual links to a model's one-to-many objects? 【发布时间】:2012-04-24 07:13:27 【问题描述】:

如果这太复杂或不是正确的做事方式,请随时将我链接到其他内容或只是告诉我应该以另一种方式做...

基本上,我正在从事一个有客户的项目,每个客户都附有任意数量的网站。所以 Websites 模型对 Client 模型有一个 ForeignKey。网站管理页面非常深入,每个客户可能有 10 个或更多网站,所以我不想让它们都显示为内联,因为那样看起来真的很混乱和疯狂。

我想要的是,当您转到管理面板并单击“客户”时,您会被带到更改页面,其中包含您要为客户编辑的基本内容,然后是实际链接的内联每个客户的网站管理页面。像这样:

更换客户

一般

姓名:

地址:

电话:

网站

编辑网站 1 的链接

编辑网站 2 的链接

编辑网站 3 的链接

编辑网站 4 的链接

编辑网站 5 的链接

【问题讨论】:

我可以将“client”添加到网站的 list_filter 选项中,但这会使焦点从 client 字段上移开,因为它一直在右侧,而且非常小。此外,当您进入列表页面时,它会留下大量的网站对象供您查看。 【参考方案1】:

您可以使用TabularInline,其中仅包含指向模型更改页面的链接:

class ClientAdmin(admin.ModelAdmin):
    # everything as normal
    inlines = WebsiteInline,

class WebsiteInline(admin.TabularInline):
    model = Website
    fields = 'link',
    readonly_fields = 'link',
    def link(self, instance):
        url = reverse("admin:myapp_website_change", args = (instance.id,))
        return mark_safe("<a href='%s'>%s</a>" % (url, unicode(instance)))

admin.site.register(Client, ClientAdmin)
admin.site.register(Website)

请参阅我最近的问题How do I add a link from the Django admin page of one object to the admin page of a related object?,它是关于如何做到这一点的,但有几对模型,而不仅仅是一个。

【讨论】:

以上是关于在 Django 管理员中,有没有办法显示模型的一对多对象的实际链接列表?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 Django 中为内联管理表单设置单独的页面?

django:管理站点中模型的自定义名称

有没有办法以从 django 视图中作为上下文传递的一种很好的方式在 html 中显示 json 结果?

在 Django 模型中显示静态图像

反向 Django 管理 URL

Django - 如何从模型实例中获取管理员 URL