Django:在这种情况下,一个模型有两个外键是正确的方法

时间:2017-01-18 09:11:32

标签: django django-models

我目前正在学习Django模型。这是我目前的情况。我有三个型号

1-Patient_Names
2-Patient_Responses
3-Doctor_Questions

现在,这里将有多个患者的关系将由模型Patient_Names表示。现在,每位患者都会对医生提出的问题做出具体回答,这些回答由模型Patient_Responses表示。因此,Patient_Responses模型将具有与Patient_Names模型的foreignKey的字段。此外,由于响应将来自模型Doctor_Questions的问题,因此Patient_Response具有另一个字段,是model Doctor_Questions的foreignKey。这是正确的方法吗?模型有两个外键吗?

Patient_Names                 Doctor_Questions
   |                                  |
   |---------Patient_Responses -------|       
                 |
                 pname = models.ForeignKey(Patient_Names)
                 doctor_questions = models.ForeignKey(Doctor_Questions)  

1 个答案:

答案 0 :(得分:1)

您在这里实际创建的是多对多关系,而在django中,ManyToManyField支持

案例1,Patient_Responses只有两个外键。

您不需要此型号。只需将其删除并在其余模型之一上添加ManyToManyField即可简化代码并访问此字段提供的一组功能

class Patient_Names(models.Model):
    ...
    questions = models.ManyToManyField(Doctor_Questions)

案例2,Patient_Responses包含两个外键以外的字段。

现在您无法删除Patient_Responses模型,但您仍然可以通过将其声明为直通模型来解锁ManyToManyFields的好处

questions = models.ManyToManyField(Doctor_Questions, through='Patient_Responses')