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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 02:57:44