我正在使用Django 2.1,我很难弄清楚如何在Admin中显示关系。我有两个Model Hospital
和Unit
,第三个是Exam
。它们的设置如下:
Hospital
可以有多个设备,一个设备属于一家医院。Exam
模型具有检查名称和医院名称等检查属性。
class Hospital(models.Model):
name = models.CharField(max_length=200)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.name
class Unit(models.Model):
unit_name = models.CharField(max_length=200)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
parent_company = models.ForeignKey(
Hospital, related_name='unit_parent', on_delete=models.CASCADE, verbose_name="Hospital")
class Exam(models.Model):
unit_name = models.ForeignKey(
Hospital, related_name='hospital_pk', on_delete=models.CASCADE)
exam_name = models.CharField(max_length=255, blank=True,
null=True, verbose_name="Exam's name")
date = models.DateField()
time = models.TimeField()
def __str__(self):
return self.exam_name
class CustomExamAdmin(admin.ModelAdmin):
model = Exam
list_display = ('exam_name', 'time', 'alert',
'document', 'notes', 'report', 'patients_name', 'unit_name')
list_filter = ('exam_name', 'time')
list_select_related = ('unit_name',)
fieldsets = (
("Hospital's Name:", {
'fields': ('unit_name',)}),
('Types of Exams:', {
'fields': ('exam_name', 'modality', 'model_used')}),
("Patient's name:", {
'fields': ('patients_name',)}),
)
因此,在Django Admin的Exams页面中,我可以选择医院的名称,但是我不能选择属于医院的单位。我需要选择医院以及属于医院的单位。我是否应该在Exam中添加另一个ForeignKey
,如下所示:选择的单元=型号.外键(单元,相关名称='单元pk',删除时=型号.CASCADE)
例如:医院:布鲁克代尔大学医院单位:市区单位
我得到的结果:enter image description here
1条答案
按热度按时间q5lcpyga1#
为了在
Admin
中选择Unit
,首先需要将其添加到Exam
模型中。您有一个名为unit_name
的字段,但您将其定义为Hospital
模型的外键,而不是Unit
模型的外键。如果您有一个unit_name
字段,则实际上并不需要单独的hospital
字段。因为你可以很容易地从unit_name.parent_company
得到它。所以你可以这样做:对于管理员来说,我认为最简单的方法是在admin中选择医院名称时,将医院名称作为单元名称的一部分,而不是分别选择医院和单元,如
Brookdale University Hospital|Downtown Unit
。这样,您只需要一个下拉字段。您可以这样做:另一个注意事项:
ForeignKeyField
中的related_name
是从外部模型返回到您正在定义的模型的关系。应该是
然后,从
Hospital
模型中,您可以将单位列表称为units
。