Ich habe eine Django-Anwendung mit dem folgenden Modell:
Das Objekt A ist ein einfaches Objekt, das sich von Model mit einigen Feldern erstreckt, und ein bestimmtes Feld ist ein char-Feld namens "NAME" und ein Integer-Feld "ORDER" genannt. A ist abstrakt, dh es gibt keine A Objekte in der Datenbank, sondern stattdessen ...
Objekte B und C sind Spezialisierungen von A , das heißt, sie erben von A und fügen andere hinzu Felder.
Nun nehme ich an, ich brauche alle Objekte, deren Feld NAME mit dem Buchstaben "Z" beginnt, geordnet nach dem Feld ORDER , aber ich Sie möchten alle B und C spezifischen Felder für diese Objekte verwenden. Jetzt sehe ich 2 Ansätze:
a) Führen Sie die Abfragen einzeln für B und C -Objekte durch und rufen Sie zwei Listen ab, führen Sie sie zusammen, sortieren Sie sie manuell und arbeiten Sie damit.
b) Fragen Sie A Objekte nach Namen ab, die mit "Z" beginnen, geordnet nach "ORDER" und mit dem Ergebnis die abfragen B und C Objekte, um alle verbleibenden Daten zu übertragen.
Beide Ansätze klingen sehr ineffizient, im ersten muss ich sie selbst anordnen, im zweiten muss ich die Datenbank mehrfach abfragen.
Gibt es einen magischen Weg, den ich vermisse, um alle B und C Objekte zu erhalten, geordnet nach einer einzigen Methode? Oder zumindest ein effizienterer Weg als die beiden genannten?
Vielen Dank im Voraus!
Bruno
Wenn Sie mit Ihrer "b" -Methode Abfragen durchführen, können Sie alle verbleibenden Daten "einbringen", ohne Ihre B- und C-Modelle separat abzufragen. Sie können die Beziehung "dot smallcase model name" verwenden.
%Vor%Sie müssen möglicherweise Ausnahmen von DoesNotExist versuchen. Ich bin ein wenig eingerostet mit meinem Django. Viel Glück.
Diese Frage wurde hier beantwortet.
Verwenden Sie den InheritanceManager aus dem django-model-utils Projekt.
Tags und Links python django inheritance model