Индекс списка запросов с помощью 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)