2011-04-04 4 views
14

django-mptt 0.4.2 kullanıyorum ve bir ağacı yeniden oluşturmak istiyorum.Django-mptt ağacımı nasıl yeniden oluştururum?

ağaç yöneticisi() Böyle erişmeye çalıştığınızda hangi bir metod yeniden sahiptir:

>>> my_rootnode = MyObj.objects.get(id=12) 
>>> my_rootnode.tree.rebuild() 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/usr/local/lib/python2.6/dist-packages/django/db/models/manager.py", line 211, in __get__ 
    raise AttributeError("Manager isn't accessible via %s instances" % type.__name__) 
AttributeError: Manager isn't accessible via MyObj instances 

Açıkçası bu yanlış yapıyorum. Yeniden oluşturma yöntemine nasıl erişmeliyim? Model örnekleri ile sadece örnek sınıfları ile erişilemez django.db.models.Manager den

cevap

19

AttributeError: Manager isn't accessible via MyObj instances

mptt Manager devralır. Daha fazla bilgi: burada model sınıfı MyObj'dur. Retrieving objects Bir modeli örneği kullanırken my_rootnode

doğru kullanım şöyledir:

MyObj.tree.rebuild()(documentation link)

bu myObj ağacını inşa edecek.

5

manji gerçekten doğru, yeniden adlandırmak için model sınıfını kullanmanız gerekiyor. Yalnızca belirli bir nesne ve onun soyundan için ağacı yeniden istiyorsanız

Ancak, kullanabilirsiniz:

MyObj.tree.partial_rebuild(tree_id). Benim için

+3

Not o partial_rebuild henüz bugün 0.5 itibariyle bir resmi açıklama parçası değil: önünde tire ağaç yöneticisi özeldir ve muhtemelen doğrudan erişilebilir gerektiğini belirtir rağmen En azından, bugün benim için çalıştı .5. Bu yüzden eğer pip ile kurarsanız partial_rebuild mevcut olmayacaktır. Her nasılsa ana dalı doğrudan github'dan kullanabilirsin. Şuna bakın: https://github.com/django-mptt/django-mptt/issues/250 .. –

+0

Artık 0.6.0 sürümünün bir parçası. – chhantyal

11

eser:

MenuItem.objects.rebuild() 
6

Son MPTT sürümü aşağıdaki komutu gerektirecek gibi görünüyor.

MyObj._tree_manager.rebuild() 
+0

MyObj'in bir nesne değil, Model Sınıfı olması gerektiğini unutmayın. Django-MPTT 0.8.7 ile test edildi - Kırık ilişkilerimi yeniden inşa ettim, ancak ana kategorileri olan ve hala ebeveynsiz olan bir sorun vardı. – JxAxMxIxN