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 (...)"

Miernik
la source

Réponses:

171
MyObject.objects.filter(time__gte=datetime.now()).exclude(id__in=object_id_list)
Ignacio Vazquez-Abrams
la source
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))
javed
la source