Python 如何从列表中调用django模型字段名?

Python 如何从列表中调用django模型字段名?,python,django,models,Python,Django,Models,django models.py class mymodel(models.Model): date_check = models.DateField() item_1 = models.NullBooleanField() item_2 = mod`enter code here`els.NullBooleanField() item_3 = models.NullBooleanField() item_4 = models.NullBoole

django models.py

class mymodel(models.Model):
   date_check   = models.DateField()
   item_1   = models.NullBooleanField()
   item_2   = mod`enter code here`els.NullBooleanField()
   item_3   = models.NullBooleanField()
   item_4   = models.NullBooleanField()
   item_5   = models.NullBooleanField()
任务:


如何从列表中调用字段名?

此处
被解释为标识符,因此参数名为
。有一个具有相同名称和特定值的变量这一事实与此无关

但是,我们可以通过构造一个字典来解决这个问题,该字典将
(因此这里它将被相应的值替换)映射到
、和
。我们可以使用两个连续的星号作为前缀,将此字典用作命名参数字典*:

for item in a_list :
    param1[item] = mymodel.objects.filter(date_check__year=a_year, **{item: True}).count()
    param2[item] = mymodel.objects.filter(date_check__year=a_year, **{item: False}).count()
    param3[item] = mymodel.objects.filter(date_check__year=a_year, **{item: None}).count()

因此,我们在这里计算每个查询的三件事:
True
s、
False
s和
None
s的数量。实际上,我们可以扩展此逻辑,甚至可以在单个查询中计算所有内容,这通常更有效(这本身并不正确,但进行查询通常会导致构造查询、在数据库端解释查询、序列化结果等的一些开销)。

您遇到了什么错误?谢谢,让我完成。。从django.db.models导入计数从django.db.models导入Q为a_列表中的项:data=qs.aggregate(p1=Count('pk',filter=Q(**{item:True})),p2=Count('pk',filter=Q(**{item:None})),p3=Count('pk',filter=Q(**{item:None})),param1=data['p1']或0 param2[item]=data['p2]或0参数3[项目]=数据['p3']或0代码:
for item in a_list :
    param1[item] = mymodel.objects.filter(date_check__year=a_year, **{item: True}).count()
    param2[item] = mymodel.objects.filter(date_check__year=a_year, **{item: False}).count()
    param3[item] = mymodel.objects.filter(date_check__year=a_year, **{item: None}).count()
qs = mymodel.objects.filter(date_check__year=a_year)

for item in a_list :
    data = qs.aggregate(
        p1=Count('pk', filter=Q(**{item: True}))
        p2=Count('pk', filter=Q(**{item: False}))
        p3=Count('pk', filter=Q(**{item: None}))
    )
    param1[item] = data['p1'] or 0
    param2[item] = data['p2'] or 0
    param3[item] = data['p3'] or 0