动态添加多个抽象类实例以继承类实例的最佳方法

时间:2016-10-13 18:31:10

标签: python django inheritance django-models

我花了很多时间寻找这个问题的答案,但我甚至不确定我正在寻找什么。我甚至可能通过使用抽象类来解决这个问题,因此以任何方式进行澄清都会有所帮助。

我想允许用户在表单模板中为单个疾病添加多种症状和治疗方法。由于我的知识有限,我能想象的唯一方法就是确定已经定义的症状和治疗模型领域的最大预期数量,即:

class Symptoms(models.Model):
    symptom_one = models.CharField(max_lenth=20)
    symptom_one_severity = models.PositiveIntegerField()
    symptom_two = models.CharField(max_lenth=20, blank=True)
    symptom_two_severity = models.PositiveIntegerField(blank=True, null=True)
    etc.

这就是我目前所拥有的:

Models.py

class Symptoms(models.Model):
    symptom = models.CharField(max_lenth=20)
    symptom_severity = models.PositiveIntegerField()

    class Meta:
        abstract = True

class Treatments(models.Model):
    treatment = models.CharField(max_length=20)

    class Meta:
        abstract = True

class Diseases(Symptoms, Treatments):
    disease = models.CharField(max_length=20)

Forms.py

class DiseaseForm(ModelForm):
    model = Diseases
    fields = (
        'symptom',
        'symptom_severity',
        'treatment',
        'disease',
    )

我提出的方法并不是很干,所以我想知道将多个抽象模型动态添加到继承类的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

根据您的要求,我建议将疾病模型与症状和治疗模型中的多个字段进行对应。 Read more about django model relationships here。所以你的模型看起来应该是,

class Symptoms(models.Model):
    symptom = models.CharField(max_lenth=20)
    symptom_severity = models.PositiveIntegerField()

class Treatments(models.Model):
    treatment = models.CharField(max_length=20)

class Diseases(Symptoms, Treatments):
    disease = models.CharField(max_length=20)
    symptoms = models.ManyToManyField(Symptoms)
    treatments = models.ManyToManyField(Treatments)