Ich frage die Datenbank ab, um eine Liste von Objekten zu erhalten, und verwende annotate (), um zu zählen, wie viele zugehörige Elemente sie haben.
Ich möchte nur Objekte mit einem zugehörigen zurückgeben item
über 5 zählen.
lists = List.objects.exclude(picture_url="").exclude(picture_url__icontains="google").select_related("city","city__country", "user", "user__profile").annotate(items_added=Count("item"))[:10]
Antworten:
4 für die Antwort № 1lists = List.objects.exclude(picture_url="")
.exclude(picture_url__icontains="google")
.select_related("city","city__country", "user", "user__profile")
.annotate(items_added=Count("item"))
.filter(items_added__gt=5)[:10]
Im Gegensatz zu aggregate () ist annotate () kein TerminalKlausel. Die Ausgabe von Die Annotate () - Klausel ist ein QuerySet. Dieses QuerySet kann geändert werden mit einem anderen QuerySet-Vorgang, einschließlich filter (), order_by oder sogar weitere Aufrufe zum Annotieren ().