如何在Django 2.0 Admin中创建多个关联对象?
在Django Admin中创建多个关联对象的解决方案
嘿,针对你用Django 2.0开发的这两个模型,要实现在Admin里同时创建多个关联的ChapterQuestion对象,用Django自带的InlineModelAdmin就完全能搞定,这是专门用来处理关联模型的内联编辑功能,非常方便。
先给你理清楚具体步骤:
1. 先完善你的ChapterQuestion模型
你代码里的definition字段没写完,先补全它,比如用TextField存定义内容:
class ChapterQuestion(models.Model): chapter = models.ForeignKey(Chapter, on_delete=models.CASCADE) word = models.CharField(max_length=250) definition = models.TextField(blank=False) # 补全字段定义 def __str__(self): return self.word
2. 在admin.py中定义内联类
创建一个继承自admin.TabularInline或admin.StackedInline的类,用来把ChapterQuestion关联到Chapter的Admin页面里:
TabularInline:以表格形式展示关联对象,节省空间,适合字段少的场景StackedInline:每个关联对象单独堆叠展示,字段多的时候更清晰
示例代码:
from django.contrib import admin from .models import Chapter, ChapterQuestion # 定义ChapterQuestion的内联类 class ChapterQuestionInline(admin.TabularInline): model = ChapterQuestion extra = 3 # 默认显示3个空的输入表单,方便直接添加 # 可选设置:max_num=10 限制最多添加10个问题,min_num=1 要求至少添加1个 # 注册Chapter的Admin,并关联内联类 class ChapterAdmin(admin.ModelAdmin): inlines = [ChapterQuestionInline] # 把内联类加进来 # 注册两个模型 admin.site.register(Chapter, ChapterAdmin) admin.site.register(ChapterQuestion)
3. 效果说明
做完上面的配置后,当你在Django Admin里创建或编辑Chapter对象时,页面下方会出现一个表格区域,默认显示3个空的ChapterQuestion输入框,你可以直接填写多个问题的word和definition,保存Chapter的时候,这些关联的问题会自动被创建并关联到当前Chapter上。
如果你想调整默认显示的空表单数量,修改extra的值就行;要是想限制添加的数量,加上max_num和min_num参数就好。
最后别忘了,如果你刚才补全了ChapterQuestion的字段,先运行数据库迁移命令:
python manage.py makemigrations python manage.py migrate
重启服务器后,登录Admin就能看到效果啦!
内容的提问来源于stack exchange,提问作者Anuj TBE
相关产品推荐
相关产品推荐

