Jak wykonać lub kondycjonować w zapytaniu django?

Chcę napisać zapytanie Django równoważne z tym zapytaniem SQL:

SELECT * from user where income >= 5000 or income is NULL.

Jak skonstruować Filtr zapytań Django?

User.objects.filter(income__gte=5000, income=0)

To nie działa, ponieważ to ANDsą filtry. Chcę OR filtrów, aby uzyskać połączenie poszczególnych zestawów zapytań.

Author: meshy, 2011-07-04

2 answers

from django.db.models import Q
User.objects.filter(Q(income__gte=5000) | Q(income__isnull=True))

Poprzez Dokumentację

 419
Author: Lakshman Prasad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-26 02:13:02

Ponieważ QuerySets implementują Operator Pythona __or__ (|), lub union, po prostu działa. Jak można się spodziewać, operator binarny | zwraca QuerySet, więc order_by(), .distinct(), i inne filtry queryset mogą być przyczepione do końca.

combined_queryset = User.objects.filter(income__gte=5000) | User.objects.filter(income__isnull=True)
ordered_queryset = combined_queryset.order_by('-income')
 46
Author: hobs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-17 13:00:11