Как сделать фильтр queryset с двумя списками?
Я очень новичок в django,
У меня есть два списка, и я хочу отфильтровать значения из таблицы. Я использовал этот запрос, но он дает мне объединение двух списков, т.е. OR. Я хочу что-то с AND, т.е. фильтровать значения таким образом retail_item_list = [100,120]
и city_id_list = [1,2]
вывод должен быть на основе этих комбинаций (100,1)
(120,2)
val = list(KVIItem.objects.filter(Q(retail_item_id__in=retail_item_list, cms_city_id__in=city_id_list)).values("retail_item_id","cms_city_id","active","id").order_by('-id'))
Вы можете построить объект Q
, который будет поэлементно требовать, чтобы если retail_item
является 100
, то city_id
должен быть 1
; или если retail_item
является 120
и city_id
является 2
.
Мы можем сделать это с помощью:
from django.db.models import Q
qfilter = Q(
*[
Q(retail_item_id=retail, cms_city_id=city)
for retail, city in zip(retail_item_list, city_id_list)
],
_connector=Q.OR
)
KVIItem.objects.filter(qfilter)