У меня есть два типа списка фильтров, как показано ниже
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))
Как мне написать правильно работающий запрос?