2017-08-21 2 views
-1

Ich habe ein Modell, das selbst-referenziert haben, ich möchte alle Kind und Kind des Kindes und so weiter in einer Abfrage. Gibt es ein Abfrage-Set, um alle untergeordneten Elemente mit einem übergeordneten Element zu verknüpfen?Django erhalten alle Kind und Unter-Kinder eines Elternteils

+0

Bitte fügen Sie Kommentar zur –

+0

Frage möglicherweise beantwortet https://stackoverflow.com/questions/43903948/recursive-queryset-with-django – bobleujr

Antwort

0

Ich habe etwas ähnliches in einem Projekt zuvor getan, außer dass ich SQLAlachemy verwendet habe. Sie könnten eine Eigenschaft oder eine Klassenmethode auf dem Modell hinzufügen, die etwas wie meine Methode unten tut:

Außer Sie würden das Listenverständnis ändern, um die Django-Beziehungsabfrage (M2M, Fremdschlüssel) zu verwenden.

Da Sie bereits das Objekt haben, wenn die Eigenschaft mit unter Sie so etwas wie dies in der Liste Verständnis für eine M2M-Beziehung Abfrage tun können:

[c.serialize for c in self.related_column.all()]

@property 
    def serialize(self): 
     """ Returns a json serializable dict. 

     Notes: 
      What's cool about this is that the children's key recursively keeps 
      calling itself on all of the children of each new node. Causing the 
      output to look like which is pretty powerful. 

      - Root 
       - level_1 
        - level_2 
         - level_3 
       - level_1 
        - level_2 
         - level_3 
       - level_1 
        - level_2 
         - level_3 

     Returns: 
      dict: Key value pairs of essential Node data. 
     """ 
     base = { 
      'id':    self.id, 
      'name':    self.name, 
      'min_num':   self.min_num, 
      'max_num':   self.max_num, 
      'parent_id':   self.parent_id, 
      'can_have_children': self.can_have_children 

     } 
     if self.can_have_children: 
      return {**base, 'children': [c.serialize for c in self.sub_nodes]} 
     else: 
      return base 
Verwandte Themen