在 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 中为内联管理表单设置单独的页面?