मैं बहुत कम भाग्य के साथ django-mptt का उपयोग करने का प्रयास कर रहा हूं। यह Python2.5, विंडोज़, sqlite3, Django 1.2pre, django-mptt svn से नवीनतम है।Django-mptt पूरी तरह से छोटी गाड़ी या क्या मैं इसे गलत कर रहा हूं?
कोड:
मॉडल:
class Node(models.Model):
name = models.CharField(max_length=20, blank=True)
parent = models.ForeignKey('self', null=True, blank=True, related_name='children')
def __unicode__(self):
return self.name
mptt.register(Node)
स्थापना:
nodes = []
for i in range(15):
n = Node(name='node'+str(i))
n.save()
nodes.append(n)
nodes[0].move_to(None)
nodes[0].save()
for n in range(1,15):
nodes[n].move_to(nodes[(n-1)/2],'last-child')
nodes[n].save()
यह एक जड़ और प्रत्येक गैर-पत्ती नोड के बंद फांसी दो बच्चों के साथ एक पेड़ बनाना चाहिए।
अब मज़ा शुरू होता है:
>>> nodes[0].children.all()
[<Node: node1>, <Node: node2>]
>>> nodes[0].get_descendants()
[]
>>> nodes[0].get_descendants(True)
[<Node: node0>, <Node: node2>]
>>> for n in nodes:
... print n, n.get_ancestors()
...
node0 []
node1 [<Node: node0>]
node2 [<Node: node0>]
node3 [<Node: node0>, <Node: node2>]
node4 [<Node: node0>, <Node: node2>]
node5 [<Node: node0>, <Node: node2>]
node6 [<Node: node0>, <Node: node2>]
node7 [<Node: node0>, <Node: node2>, <Node: node6>]
node8 [<Node: node0>, <Node: node2>, <Node: node6>]
node9 [<Node: node0>, <Node: node2>, <Node: node6>]
node10 [<Node: node0>, <Node: node2>, <Node: node6>]
node11 [<Node: node0>, <Node: node2>, <Node: node6>]
node12 [<Node: node0>, <Node: node2>, <Node: node6>]
node13 [<Node: node0>, <Node: node2>, <Node: node6>]
node14 [<Node: node0>, <Node: node2>, <Node: node6>]
क्यों पूर्वजों के इतने गलत कर रहे हैं? उदाहरण के लिए, नोड 10 में पूर्वजों होना चाहिए, (0,1,10)
क्या मैं कुछ गलत कर रहा हूं या क्या django-mptt में बग हैं?
आप इस उत्तर के लिए बहुत बहुत धन्यवाद:
समाधान हर बार जब आप एक बच्चे को जोड़ने के डेटाबेस से माता-पिता को फिर से लोड करने के लिए है। मुझे लगता है कि मैं अपने मामले में mptt का उपयोग नहीं करूंगा और "RECURSIVE" का प्रयास करूंगा जो PostgreSQL द्वारा समर्थित है। – guettli
मैंने इसे कुछ मिनट पहले एक और साइट पर पाया, लेकिन आपकी व्याख्या सबसे संक्षिप्त थी और पुष्टि करता है कि मैं इसे सही ढंग से समझता हूं। धन्यवाद – Gattster