我在这样的某个地方生成了一个字典:
d = {'k1':'v1','k2':'v2',...}
我想构建一个类似的查询:
SomeModule.objects.filter(Q(k1 = v1)| Q(k2 = v2)| ...)
我该怎么做才能构建查询?
答案 0 :(得分:3)
如果您正在进行“OR”查询,请执行以下操作:
from django.db.models import Q
q = Q()
for k,v in d.iteritems():
q |= Q(**{'%s__equal' % k: v})
SomeModule.objects.filter(q)
对于“AND”查询,它更简单,如In Django, how does one filter a QuerySet with dynamic field lookups的答案所示:
SomeModule.objects.filter(**d)
答案 1 :(得分:0)
你也可以在一行中使用功能方式,而不需要程序范例强制的那些讨厌的临时变量:
SomeModule.objects.filter(reduce(Q.__or__, (Q(k=v) for k, v in d.iteritems())))