Django Admin:在Patient模型后台展示并新增关联History数据
Django Admin 实现 Patient 页面内嵌 History 表格与新增功能
解决方案:使用 InlineModelAdmin
Django Admin 原生支持通过 InlineModelAdmin 在父模型页面内嵌关联的子模型,完美适配你这种一对多的关联场景。具体实现步骤如下:
1. 定义 History 内联类
在你的 admin.py 文件中,创建继承自 TabularInline 的内联类(TabularInline 会以表格形式展示子模型数据):
from django.contrib import admin from .models import Patient, History class HistoryInline(admin.TabularInline): model = History extra = 1 # 默认显示1个空白表单用于新增记录 # 可选:如需限制可编辑字段,添加fields属性 # fields = ('diagnosis',)
2. 修改 PatientAdmin 配置
将上述内联类添加到 PatientAdmin 的 inlines 列表中:
@admin.register(Patient) class PatientAdmin(admin.ModelAdmin): list_display = ('name',) # 列表页显示的字段 inlines = [HistoryInline] # 关联内联类 # 可选:单独注册History模型,方便独立管理病史记录 @admin.register(History) class HistoryAdmin(admin.ModelAdmin): list_display = ('patient', 'diagnosis')
效果说明
- 进入任意 Patient 的详情页面时,下方会以表格形式展示该患者所有的 History 记录。
- 表格底部会有
extra参数指定数量的空白表单,填写后点击保存即可新增该患者的病史记录。 - 已存在的病史记录可直接在表格中编辑或删除,无需跳转页面。
为什么 ManyToMany 字段无效?
你的业务场景是一对多(一个患者对应多条病史,一条病史仅属于一个患者),而 ManyToMany 是用于多对多关联的场景(比如一个患者属于多个科室、一个科室有多个患者),关联类型不匹配,因此无法达到预期效果。
内容的提问来源于stack exchange,提问作者Kevin Lee
相关产品推荐
相关产品推荐

