Django Admin实现Group与Word模型嵌套展示报错求助
解决Django Admin中Group与Word的嵌套显示问题
你想要在Group的Admin页面里展示关联的Word列表,并且每个Word能点击跳转到详情页对吧?你的代码里有几个小问题导致了错误,我来一步步帮你修正:
先梳理你代码里的错误点
GroupAdmin的inlines配置错误:你写了inlines = (Word,),但这里应该放你定义的WordInline类,而非Word模型本身ModelAdmin不需要Meta类:Django的ModelAdmin类不需要内部嵌套Meta类,你添加的这个类正是触发no class meta错误的原因- 模型注册方式错误:
admin.site.register的正确用法是,对需要自定义Admin的模型,要写成admin.site.register(Group, GroupAdmin),不能把GroupAdmin直接放进注册列表里
正确实现嵌套可点击Word的代码
下面是修正后的完整代码,同时实现了每个Word条目可点击跳转到它的Admin详情页:
from django.contrib import admin from django.urls import reverse from django.utils.html import format_html from main_app.models import Profile, Project, User, Word, Phrase, Group class WordInline(admin.TabularInline): model = Word # 只显示可点击的Word名称 fields = ('word_link',) readonly_fields = ('word_link',) # 不显示多余的空表单,也禁止在Group页面删除Word(按需调整) extra = 0 can_delete = False def word_link(self, obj): # 生成Word的Admin详情页链接 url = reverse('admin:main_app_word_change', args=[obj.pk]) return format_html('<a href="{}">{}</a>', url, obj.name) # 设置列的显示标题 word_link.short_description = 'Word' class GroupAdmin(admin.ModelAdmin): list_display = ('name',) # 可根据你的需求添加其他Group字段 inlines = (WordInline,) # 关联定义好的Inline类 # 正确注册模型与对应的Admin类 admin.site.register(Group, GroupAdmin) admin.site.register(Word) admin.site.register(Phrase) # 其他模型如Profile、Project、User按需注册即可
代码说明
WordInline部分:- 通过
word_link方法生成每个Word的Admin详情页链接,用reverse获取正确的后台URL,format_html渲染可点击的HTML标签 extra=0避免显示多余的空Word表单,can_delete=False防止在Group页面误删Word(如果需要删除权限可以去掉这个配置)
- 通过
GroupAdmin部分:- 移除了多余的
Meta类,正确将inlines配置为自定义的WordInline类
- 移除了多余的
- 注册部分:
- 分开注册Group和它的Admin类,其他模型按常规方式注册即可
这样配置后,你在Group的Admin详情页里就能看到想要的结构:
- Group(当前Group的详情信息)
- Word1(可点击跳转至该Word的Admin详情页)
- Word2(可点击跳转)
- Word3(可点击跳转)
内容的提问来源于stack exchange,提问作者user2950593
相关产品推荐
相关产品推荐

