Frage

Ich habe ein Django-Modell namens Sammlung, die eine Sammlung von Gegenständen (CollectionItem) darstellt. Jede Sammlung enthält nur Elemente eines bestimmten Typs. (CollectionItem hat einen Fremdschlüssel Collection).

Ich möchte all die CollectionItems erhalten, die in der Öffentlichkeit Liste steht Listen eines bestimmten Typs sind und bringt sie nach einem bestimmten Feld sortiert. Hier ist die Abfrage-Code, die ich benutze:

lists = Collection.objects.filter(is_public=True, type=7)
items = CollectionItem.objects.none()
for list in lists:
    items |= CollectionItem.objects.filter(collection=list)
items = items.order_by('name')

Ich muss sich vorstellen, dass dies auch gar nicht skaliert, wenn ich eine große Datenbank mit jeder Menge von Listen und Einzelteile haben. Gibt es einen besseren Weg, dies in Django zu tun? Oder ist die Ineffizienz in der Abfrage-Schleife beteiligt vernachlässigbar genug im Vergleich zu anderen Optionen, die ich soll nicht zu viele Sorgen machen?

War es hilfreich?

Lösung

Klingt wie Sie brauchen nur:

items = CollectionItem.objects.filter(
                    collection__is_public=True, collection__type=7
               ).order_by('name')
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top