如何在django模型中表示某种矩阵数据表?

时间:2014-05-17 17:59:13

标签: django forms models

真的需要一些帮助,

如何使用django模型表示一种类似下面的数据? ,以便我可以构建表单来添加/编辑/删除条目,并有效地构建一些报告?

这是为了说明的目的,根据疾病类型,患者的年龄组,进一步分为男性和女性,然后进入反复发生和新发生的情况,每年每个月发生疾病的数量表。

父组中的出现条目将是其子组的聚合。

year : 2014 month : January
------------------------------------------------------------------------------
                                |   age_group1    |   age_group2   |  etc .. 
                                | male   | female |male   | female |           
                                | rec|new|rec|new |rec|new|rec|new |                                
----------------------------------------------------------------------
infectious disease group        : 11   5   
    viral disease subgroup      :  8   0                             etc ...
       viral_disease1           :  4   0
       viral disease2           :  4   0
    bacterial disease subgroup  :  3   5
       bacter_disease1          :  1   4
       bacter_disease2          :  2   1
degenerative disease group      :
    neural_disease subgroup     :
        neur_disease1           :
        neur_disease2           :
     ... etc ..         

1 个答案:

答案 0 :(得分:2)

这是您可以使用的一种设计。它允许灵活定义疾病和报告。如果需要,您可以创建一个新的Report模型,其中包含开始和结束字段以及一个到DiseaseReport模型的ManyToMany。此设计假设您已批量提供数据。如果您获得了患者的个人信息,则必须对其进行修改。

class AgeGroup(models.Model):
    pass

class PatientGroup(models.Model):
    NEW = 0
    RECURRING = 1
    PATIENT_STATES = (
        (NEW, "New"),
        (RECURRING, "Recurring"),
    )
    age_group = models.ForeignKey(AgeGroup)
    is_male = models.BooleanField()
    state = models.SmallIntegerField(choices=PATIENT_STATES, default=NEW)

DiseaseGroup(models.Model):
    parent_disease = models.ForeignKey(DiseaseGroup, null=True, blank=True)
    name = models.CharField(max_length=100)

Disease(models.Model):
    disease_group = models.ForeignKey(DiseaseGroup)
    name = models.CharField(max_length=100)

DiseaseReport(models.Model):
    start = models.DateField()
    end = models.DateField()
    disease = models.ForeignKey(Disease)
    patient_group = models.ForeignKey(PatientGroup)
    cases = models.IntegerField(default=0)