Создание переменной Q в django orm
Я хочу привести этот запрос в действие как одну переменную Q
In [55]: Practitioner.objects.filter(query).filter(query10).distinct()
Out[55]: <QuerySet [<Practitioner: Mohsenibod, Hadi>]>
Я использовал эти методы, но они не работают:
In [53]: Practitioner.objects.filter(query & query10).distinct()
Out[53]: <QuerySet []>
In [54]: Practitioner.objects.filter(query , query10).distinct()
Out[54]: <QuerySet []>
Можно использовать Q objects
и объединить с помощью оператора логического ИЛИ |
, так:
from django.db.models import Q
combined_query = Q(query) | Q(query10)
result = Practitioner.objects.filter(combined_query).distinct()
Этот запрос строится путем объединения условий, указанных в query
и query10
, с помощью оператора логического ИЛИ |
. Затем он фильтрует набор запросов Practitioner
на основе этого комбинированного запроса и гарантирует, что результаты будут разными.
Мои объекты были такими:
query = Q(specialties__isnull=False,practices__city__isnull=False,practices__location__latitude__isnull=False,practices__city__id__in=permitted_cities,specialties__in=permitted_specialties)
query10 = Q(practices__city__slug = city)
Я не знаю, в чем проблема с django, но я решил эту ошибку, используя kwargs вместо объектов Q, а затем написав этот запрос:
combined_query = {'specialties__isnull' : False,
'practices__city__isnull' : False,
'practices__location__latitude__isnull' : False,
'practices__city__id__in': permitted_cities,
'specialties__in': permitted_specialties,
'practices__city__slug' : city}
Out[54]: Practitioner.objects.filter(**combined_query).distinct()
Out[55]: <QuerySet [<Practitioner: Mohsenibod, Hadi>]>