Requêtes Django: comment filtrer les objets pour exclure l'id qui est dans une liste?


87

Comment puis-je filtrer dans une requête pour que le résultat exclue toutes les instances d'objet dont l'ID appartient à une liste?

Disons que j'ai:

object_id_list = [1, 5, 345]

MyObject.objects.filter(Q(time__gte=datetime.now()) & Q( ... what to put here? ... ))

Quelque chose dans le style de "SELECT * FROM ... WHERE id NOT IN (...)"

Réponses:


171
MyObject.objects.filter(time__gte=datetime.now()).exclude(id__in=object_id_list)

1
Quel est le nom de MyObject.objects? Où puis-je lire sur cette classe?
Serge

@Serge MyObject serait simplement lié à votre classe de modèle Django quelle qu'elle soit. Ainsi, par exemple, vous pouvez avoir UserProfile.objects si vous avez une configuration de modèle UserProfile.
codeguy

Merci, mais je demande juste à propos de .objects. Qu'Est-ce que c'est?
Serge

14

Vous pouvez également le faire en utilisant l' Qobjet:

from django.db.models import Q

MyObject.objects.filter(time__gte=datetime.now()).filter(~Q(id__in=object_id_list))
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.