Django:如何使用for循环访问链式查询集中的字段?

时间:2016-06-09 14:01:41

标签: python django django-views

我正在使用django v1.8

我必须在models.py中建模:

class Demographic:
    patient_id = models.IntegerField(unique= True ,primary_key=True)
    age = models.IntegerField(null=True,blank=True)

class MyTest:
    patient = models.ForeignKey(Demographic)
    date_vaccination =  models.DateField(null=True,blank=True)

关于患者的date_vaccinationage,我希望为所有接种疫苗的患者找到接种疫苗时的年龄

这个结果我想用chartit模块将它显示给图表。

views.py我有:

total_patients = Demographic.objects.filter(mytest__date_vaccination__isnull = False)
total_patients_vac = MyTest.objects.filter(date_vaccination__isnull = False)

result_list = list(chain(total_patients, total_patients_vac))

我正在使用chain将这些querysets添加到列表中。然后,对于每位患者,我想计算他们接种疫苗时的年龄,以便在图表中显示。

当我尝试迭代链式列表时,我收到错误'MyTest' object has no attribute 'age'

for e in result_list:
        print e.age

我想要这个:

x = e.age - e.date_vaccination
在for循环中

并将结果添加到新列表中。

1 个答案:

答案 0 :(得分:1)

Zinon,

因为我能理解你想要什么。你希望得到所有年龄段的患者。

我不会使用这种链式方法,因为Django ORM足够聪明,可以从MyTest类中获取数据。

vaccines = MyTest.objects.filter(date_vaccination__isnull = False)
for vaccine in vaccines:
    age = vaccine.patient.age
    vaccine_date = vaccine.date_vaccination

这是因为当你在Django模型上声明models.ForeignKey时,你不只是在那里放一个数字(在你的数据库上),你可以访问真正的Demographic对象做vaccine.patient

class MyTest:
    patient = models.ForeignKey(Demographic)
    date_vaccination =  models.DateField(null=True,blank=True)

顺便说一下,我不知道你的真实需求,但不会保存病人的年龄,因为这可以用病人的生日计算。我会保存他的生日并根据疫苗日期计算他/她的年龄。