Gibt es eine Möglichkeit, nur eine Abfrage einer Superklasse durchzuführen und dann eine Liste aller entsprechenden Unterklassen in Django zu erhalten?[Duplikat]

StackOverflow https://stackoverflow.com//questions/9674046

Frage

Mögliches Duplikat:
Django Model Inheritance fragt eine zentrale Tabelle ab

Folgen Sie den offiziellen Dokumenten, die Sie hier finden
https://docs.djangoproject.com/en/dev/topics/db/models/#multi-table-inheritance

Ich sehe, dass ich über „Ort, der ein Super-Restaurant ist“ abfragen kann

p = Place.objects.filter(name="Bob's Cafe")

Gibt es an diesem Punkt also eine Möglichkeit zu überprüfen, ob die zurückgegebenen Objekte auch vom Typ „Restaurant“ der Unterklasse sind, und wenn ja, auf deren Unterklassenfelder zuzugreifen?

Im Moment kann ich nur sagen, dass alle zurückgegebenen Objekte der Place-Klasse angehören und ihre Unterklasseneigenschaften und -methoden nicht verfügbar sind, da das Objekt nicht in seine Unterklasse umgewandelt wird.

Wenn diese Methodik nicht möglich ist, was ist dann die beste Vorgehensweise beim Versuch, eine Superklasse zu abstrahieren und den Aufwand für Abfragen zu minimieren, wenn versucht wird, eine Liste mit allen Unterklassenmodellen zu erhalten?Ich verstehe, dass ich theoretisch jede Unterklasse abfragen und dann die Liste zusammenfassen könnte, aber dann müsste ich mehr tun, wenn ich diese Liste beispielsweise nach Datum ordnen wollte.

War es hilfreich?

Lösung

Gibt es an diesem Punkt also eine Möglichkeit zu überprüfen, ob die zurückgegebenen Objekte auch vom Typ „Restaurant“ der Unterklasse sind, und wenn ja, auf deren Unterklassenfelder zuzugreifen?

Wenn Sie das Place-Modell abgefragt haben, handelt es sich bei den zurückgegebenen Objekten um Place-Instanzen, die keine Kenntnis von MTI-assoziierten Unterklassen haben.Sie müssen in der Oberklasse ein Feld bereitstellen, um eine Verbindung nach unten zur Unterklasse herzustellen.Sehen Erstellen eines generischen Mehrtabellen-Vererbungsdesigns in Django

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top