Python Django-基于同一中介模型的两个或多个多对多关系

Python Django-基于同一中介模型的两个或多个多对多关系,python,django,many-to-many,Python,Django,Many To Many,在使用Django的医疗应用程序中,既有患者模型,也有药物模型(在本问题中,只有“名称”字段),其中需要建立三种多对多关系: allergies:不需要额外的字段,因此一个简单的ManyToManyField就足够了 其他药物:指患者因其他医疗原因服用的药物的表格(也会有“剂量”列) 处方:指我们诊所为患者开出的药物的表格(也会有“剂量”和“持续时间”列) 我考虑了一些可能的解决办法。我的问题基本上是哪个更可取: 制作两个不相关的中介模型(这似乎是个坏主意,因为它违反了枯燥的原则) 制作一个

在使用Django的医疗应用程序中,既有患者模型,也有药物模型(在本问题中,只有“名称”字段),其中需要建立三种多对多关系:

  • allergies
    :不需要额外的字段,因此一个简单的ManyToManyField就足够了
  • 其他药物
    :指患者因其他医疗原因服用的药物的表格(也会有“剂量”列)
  • 处方
    :指我们诊所为患者开出的药物的表格(也会有“剂量”和“持续时间”列)
我考虑了一些可能的解决办法。我的问题基本上是哪个更可取:

  • 制作两个不相关的中介模型(这似乎是个坏主意,因为它违反了枯燥的原则)
  • 制作一个抽象模型并从中继承,这可以解决干冲突,但看起来仍然过于冗长(甚至不知道这是否适用于Django)
  • 此外,如果
    处方
    其他药物
    字段建立了相同的关系,那么这个问题的解决方案会有所不同吗?(即,两者都有“剂量”和“持续时间”列)。我假设在这种情况下,代码重用会更简单

    提前谢谢

    class Prescription(models.Model):
        medication = models.ForeignKey(Medication, on_delete=models.CASCADE)
        patient = models.ForeignKey(Patient, on_delete=models.CASCADE)
        dose = models.CharField(max_length=32)
    
    class OtherMedication(models.Model):
        medication = models.ForeignKey(Medication, on_delete=models.CASCADE)
        patient = models.ForeignKey(Patient, on_delete=models.CASCADE)
        dose = models.CharField(max_length=32)
        duration_in_days = models.IntegerField()
    
    class PatientMedicationRelationship(models.Model):
        class Meta:
            abstract = True
    
        medication = models.ForeignKey(Medication, on_delete=models.CASCADE)
        patient = models.ForeignKey(Patient, on_delete=models.CASCADE)
        dose = models.CharField(max_length=32)
    
    class Prescription(PatientMedicationRelationship):
        pass
    
    class OtherMedication(PatientMedicationRelationship):
        duration_in_days = models.IntegerField()