2012-03-29 26 views
2

ich das tree_id Feld außer Kraft setzen möchten, wie folgend:MPTT - Wie außer Kraft setzen „tree_id“

Gegeben:

class Thing(MPTTModel): 
    thing_id = models.AutoField(primary_key=True) 
    ... 

    class MPTTMeta: 
     tree_id = ? 

Während das „Ding“ erste Elternteil zu schaffen Ich möchte mit dem thing_id einzuleiten tree_id zugewiesen, wenn das Objekt zum ersten Mal gespeichert wird.

Als nächstes möchte ich für "Thing" -Objekte, die später erstellt werden, die thing_id des ersten zuvor erstellten Parent übergeben.

, d. H. Alle Knoten in Baum haben als tree_id die Objekt-ID (thing_id) des ersten Vorfahren.

Ist es möglich?

Wie muss ich den Wert beim Erstellen der "Thing" -Objekte übergeben?

Edit:

So ist es die Lösung für meine Bedürfnisse scheint lediglich: Thing.objects.get (pk = thing_id) .get_descendants()

Antwort

1

Ich weiß nicht, was Sie versuchen zu machen. tree_id ist ein django-mptt internes Feld, es hat außerhalb des MPT-Algorithmus keine große Bedeutung.

Vielleicht versuchen Sie Ihren Baum nach thing_id zu sortieren, so dass Dinge mit den ältesten Vorfahren zuerst im Baum erscheinen? Ich weiß nicht, warum du das willst, aber wenn ja, solltest du wahrscheinlich order_insertion_by verwenden.

class MPTTMeta: 
    order_insertion_by = ['thing_id'] 

Docs: http://django-mptt.github.com/django-mptt/models.html#model-options

+0

Alles, was ich will, ist eine Teilmenge meiner "Dinge" Objekte auszuwählen. Ich sah in der Dokumentation die Verwendung von Genre.objects.all() und dachte, dass, wenn alle meine "Dinge", die mit dem ersten Vorfahren in der umgekehrten Struktur verwandt sind, als tree_id die erste Vorgänger-Objekt-ID hat, so wird es einfach sein, sie auszuwählen wie folgt: list = Thing.objects.filter (thing_type = 2, tree_id = sache_id) – bentzy

+0

Also ... willst du die Nachkommen eines Knotens bekommen? Sie können einfach Thing.objects.get (pk = 1) .get_descendants() verwenden – craigds

Verwandte Themen