我正在使用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_vaccination
和age
,我希望为所有接种疫苗的患者找到接种疫苗时的年龄。
这个结果我想用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循环中并将结果添加到新列表中。
答案 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)
顺便说一下,我不知道你的真实需求,但不会保存病人的年龄,因为这可以用病人的生日计算。我会保存他的生日并根据疫苗日期计算他/她的年龄。