Индекс списка запросов с помощью django

у меня проблема с django, когда я использую эти два массива:
institution_ids [(2,), (16,)]
project_ids [(3,), (1,)]

в этом запросе:

queryset = Patient.active.filter(tss_id__in=institution_ids, project_id__in = project_ids)

он возвращает мне все комбинации, но мне нужен такой результат:

queryset = Patient.active.filter(tss_id=institution_ids[0], project_id = project_ids[0])
queryset += Patient.active.filter(tss_id=institution_ids[1], project_id = project_ids[1])

как я могу сделать?
Спасибо
Джузеппе

То, что вы ищете, является оператором OR. Вы можете сделать это с помощью объекта Q.

В Django мы не можем напрямую использовать оператор OR для фильтрации QuerySet. Для этой реализации мы должны использовать объект Q(). На сайте используя объект Q() в методе фильтрации, мы сможем использовать оператор оператор OR между объектами Q().

Например-

Если вы хотите получить все объекты с tss_id в массиве institution и все объекты с project__id__ в массиве projects_id, вы будете использовать его следующим образом.

queryset = Patient.active.filter(Q(tss_id__in=institution_ids) | project_id__in = project_ids))

Обратите внимание - вам нужно импортировать Q.

Другой вариант -

Использование союза

Новое в Django 1.11. Использует оператор UNION SQL для объединения результатов двух или более наборов запросов. По умолчанию оператор UNION выбирает только отдельные значения. Чтобы разрешить дублирующиеся значения, используйте аргумент all=True.

Например :

queryset = Patient.active.filter(tss_id=institution_ids[0], project_id = project_ids[0])
queryset2 = Patient.active.filter(tss_id=institution_ids[1], project_id = project_ids[1])
Combined_queryset = queryset.union(queryset2)
Вернуться на верх