Chcę napisać zapytanie Django równoważne temu zapytaniu SQL:
SELECT * from user where income >= 5000 or income is NULL.
Jak zbudować filtr zestawu zapytań Django?
User.objects.filter(income__gte=5000, income=0)
To nie działa, ponieważ są to AND
filtry. Chcę OR
filtrów, aby uzyskać połączenie poszczególnych zestawów zapytań.
Odpowiedzi:
poprzez dokumentację
źródło
Ponieważ QuerySets implementuje
__or__
operator Python (|
) lub union, po prostu działa. Jak można się spodziewać,|
operator zwraca binarnyQuerySet
takorder_by()
,.distinct()
i inne filtry queryset może być dołączona do końca.Aktualizacja 2019-06-20: Jest to teraz w pełni udokumentowane w dokumentacji interfejsu API QuerySet Django 2.1 . Bardziej historyczną dyskusję można znaleźć w bilecie DjangoProject # 21333 .
źródło
Obie opcje są już wspomniane w istniejących odpowiedziach:
i
Wydaje się jednak, że istnieje pewne zamieszanie dotyczące tego, który z nich preferować.
Chodzi o to, że są one identyczne na poziomie SQL , więc możesz wybrać, co chcesz!
Django ORM Cookbook mówi dość szczegółowo o tym, tutaj jest odpowiednia część:
prowadzi do
i
prowadzi do
źródło: django-orm-cookbook
źródło