django动态列查询

时间:2009-07-11 14:15:39

标签: django orm

我在这样的某个地方生成了一个字典:

d = {'k1':'v1','k2':'v2',...}

我想构建一个类似的查询:

SomeModule.objects.filter(Q(k1 = v1)| Q(k2 = v2)| ...)

我该怎么做才能构建查询?

2 个答案:

答案 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())))