【发布时间】:2020-02-20 20:07:40
【问题描述】:
我有两种类型的过滤器列表,如下所示
a_filter = ['a', 'b', 'c']
b_filter = ['x', 'y', 'z']
我必须结合 in 查询 a_filter 和布尔字段查询 b_filter 如下所示
Item.objects.filter(a__in=a_filter, x=True, y=True, z=True)
如何动态创建此查询?我到了下面
filters = {
a_filter__in:a_filter,
}
and_condition = Q(**filters)
if len(b_filter) > 0:
or_cond = Q()
for filter in b_filter:
or_cond.add(Q(**{filter:True}), Q.AND)
and_condition.add(or_filter)
Item.objects.filter(and_condition)
这会在两个过滤器查询之间创建额外的(OR: (AND: ),如下所示
(AND: 'a_filter__in': ['a', 'b', 'c'), (OR: (AND: ), (AND:('x':True, 'y':True, 'z':True))
如何编写一个正确工作的查询?
【问题讨论】:
标签: django