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

如何在Django默认用户页面添加多对多关联的Website Tabular Inline

解决Django用户管理页面多对多关联网站的问题

报错原因

你尝试用TabularInline直接关联Website模型,但Django的TabularInline要求关联模型必须包含指向父模型(User)的ForeignKey,而Website与User是多对多关系,没有直接外键,因此触发admin.E202错误。

解决方案

方案一:用Filter控件直接管理(最简单)

在UserAdmin中添加filter_horizontal字段,直接在用户编辑页面生成直观的多对多选择控件:

class UserAdmin(admin.ModelAdmin):
    # 生成左右选择的多对多控件,反向关联名为website_set
    filter_horizontal = ('website_set',)

admin.site.unregister(User)
admin.site.register(User, UserAdmin)

这样编辑用户时,就能直接查看、添加或移除关联的网站。

方案二:用多对多中间表的Inline(适合需要扩展中间表的场景)

如果后续需要给多对多关系添加额外字段,或偏好Inline展示形式,可指定多对多的中间模型作为Inline的关联对象:

class WebsiteInline(admin.TabularInline):
    # 指定多对多关系的中间表
    model = Website.users.through
    extra = 1
    verbose_name = "关联网站"
    verbose_name_plural = "关联网站列表"
    # 自定义显示字段,只展示网站URL(需确保Website的__str__返回URL)
    fields = ('website',)

class UserAdmin(admin.ModelAdmin):
    inlines = [WebsiteInline]

admin.site.unregister(User)
admin.site.register(User, UserAdmin)

内容的提问来源于stack exchange,提问作者Alin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:52:48