【问题标题】:how to represent some kind of matrix data tables in django models?如何在 django 模型中表示某种矩阵数据表?
【发布时间】:2014-05-17 17:59:13
【问题描述】:

真的需要帮助,

如何使用 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 ..         

【问题讨论】:

    标签: django forms models


    【解决方案1】:

    这是您可以使用的一种设计。它允许灵活地定义疾病和报告。如果您愿意,您可以创建一个新的 Report 模型,其中包含 start 和 end 字段以及 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)
    

    【讨论】:

    • DiseaseGroup 模型使用自递归外键?
    • 是的,这是我首先想到的。如果你愿意,你可以制作一个闭包表。这里稍微写一下。 coderwall.com/p/lixing
    猜你喜欢
    • 1970-01-01
    • 2018-08-24
    • 2010-11-11
    • 2021-02-12
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 2021-08-20
    相关资源
    最近更新 更多