Zapytania Django: jak filtrować obiekty, aby wykluczyć identyfikator znajdujący się na liście?

87

Jak mogę filtrować zapytanie, aby wynik wykluczał wszystkie instancje obiektów o identyfikatorze należącym do listy?

Powiedzmy, że mam:

object_id_list = [1, 5, 345]

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

Coś w stylu "SELECT * FROM ... WHERE id NOT IN (...)"

miernik
źródło

Odpowiedzi:

171
MyObject.objects.filter(time__gte=datetime.now()).exclude(id__in=object_id_list)
Ignacio Vazquez-Abrams
źródło
1
Jak się nazywa MyObject.objects? Gdzie mogę przeczytać o tych zajęciach?
Serge
@Serge MyObject będzie po prostu odnosić się do twojej klasy modelu Django, cokolwiek by to nie było. Na przykład możesz mieć UserProfile.objects, jeśli masz konfigurację modelu UserProfile.
kolega z kodem
Dziękuję, ale dobrze o to pytam .objects. Co to jest?
Serge
14

Możesz to również zrobić za pomocą Qobiektu:

from django.db.models import Q

MyObject.objects.filter(time__gte=datetime.now()).filter(~Q(id__in=object_id_list))
javed
źródło