Je veux écrire une requête Django équivalente à cette requête SQL:
SELECT * from user where income >= 5000 or income is NULL.
Comment construire le filtre de jeu de requêtes Django?
User.objects.filter(income__gte=5000, income=0)
Cela ne fonctionne pas, car ce AND
sont les filtres. Je veux que OR
les filtres obtiennent l'union des ensembles de requêtes individuels.
Réponses:
via la documentation
la source
Parce que QuerySets implémente l'
__or__
opérateur Python (|
), ou union, cela fonctionne simplement. Comme on pouvait s'y attendre, l'|
opérateur binaire renvoieQuerySet
doncorder_by()
,.distinct()
et d' autres filtres QuerySet peut être clouée à la fin.Mise à jour 2019-06-20: Ceci est maintenant entièrement documenté dans la référence de l'API QuerySet Django 2.1 . Une discussion plus historique peut être trouvée dans le ticket DjangoProject # 21333 .
la source
Les deux options sont déjà mentionnées dans les réponses existantes:
et
Cependant, il semble y avoir une certaine confusion quant à la préférence.
Le fait est qu'ils sont identiques au niveau SQL , alors n'hésitez pas à choisir celui que vous aimez!
Le livre de recettes Django ORM en parle en détail, voici la partie pertinente:
mène à
et
mène à
source: django-orm-cookbook
la source