2016-12-02 2 views
2

Wenn ein Dokument in einer Mongoengine von einer anderen Dokumentklasse erbt, wird ein _cls Attribut zugewiesen, das es als Instanz der Unterklasse identifiziert. Alle Objekte, die von derselben Superklasse erben, werden in derselben Sammlung gespeichert.Kennzeichnung einer Klasse, die von Superklasse erbt, mongoengine

Supe(Document): 
    pass 

Sub(Supe): 
    pass 

Und Instanz von Sub hätte _cls="Supe.Sub". Da es sich um eine Mongoengine-Konvention handelt, wird _cls nicht weitergegeben, wenn ein Objekt aus der Auflistung abgerufen und als JSON zurückgegeben wird. Natürlich möchte ich immer die Objekte, die mit der Abfrage übereinstimmen, aber manchmal möchte ich verschiedene Unterklassen auf leicht unterschiedliche Weise anzeigen und habe herausgefunden, ob sie ein Unterklassen-spezifisches Attribut haben.

Wäre es richtig sein Subklassen wie folgt zu beschriften:

Sub(Supe): 
    kind = StringField(default='sub') 
    ... 

Es macht mich das Gefühl, ich bin mit dem Punkt der Vererbung oder zumindest die Art und Weise es mongoengine tut fehlt.

Antwort

0

„Da es eine mongoengine Konvention ist, wird _cls entlang nicht bestanden, wenn ein Objekt aus der Sammlung gezogen wird und kehrte als JSON“

Ofcourse _cls Schlüssel aus der Datenbank abgerufen werden kann, können Sie Verwenden Sie dies, um Ihre Objekte zu kategorisieren.

Wäre es richtig sein Subklassen wie folgt zu beschriften:

Sub(Supe): 
    kind = StringField(default='sub') 

Ja, warum nicht? Wenn Sie zusätzliche Informationen benötigen, können Sie sie speichern, um sie an Ihre App-Logik anzupassen. Aber ich denke, du brauchst das nicht, da du auf das Attribut _cls zugreifen kannst.

Verwandte Themen