Я хочу написать Django-запрос, эквивалентный этому SQL-запросу:
SELECT * from user where income >= 5000 or income is NULL.
Как создать фильтр запросов Djagno?
User.objects.filter(income__gte=5000, income=0)
Это не работает, потому что это AND
фильтры. Я хочу, чтобы OR
фильтры получали объединение отдельных запросов.
from django.db.models import Q
User.objects.filter(Q(income__gte=5000) | Q(income__isnull=True))
Потому что QuerySets реализует оператор Python __or__
(|
) или объединение, он просто работает. Как и следовало ожидать, двоичный оператор |
возвращает QuerySet
, поэтому order_by()
, .distinct()
и другие фильтры запросов могут быть прикреплены к концу.
combined_queryset = User.objects.filter(income__gte=5000) | User.objects.filter(income__isnull=True)
ordered_queryset = combined_queryset.order_by('-income')