2011-04-04 15 views
14

मैं django-mptt 0.4.2 का उपयोग कर रहा हूं, और एक पेड़ का पुनर्निर्माण करना चाहता हूं।मैं अपने django-mptt पेड़ का पुनर्निर्माण कैसे करूं?

>>> 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 

मैं स्पष्ट रूप से यह गलत कर रहा हूँ:

पेड़ प्रबंधक एक विधि के पुनर्निर्माण है() जो मैं इस तरह का उपयोग करने की कोशिश करते हैं। मुझे पुनर्निर्माण विधि का उपयोग कैसे करना चाहिए? django.db.models.Manager से

उत्तर

19

AttributeError: Manager isn't accessible via MyObj instances

mptt Manager inherits मॉडल उदाहरणों के माध्यम से, लेकिन केवल मॉडल कक्षाओं के माध्यम से पहुँचा नहीं जा सकता है। अधिक जानकारी: Retrieving objects

मॉडल श्रेणी यहां MyObj है। आप एक मॉडल उदाहरण का उपयोग कर रहे my_rootnode

सही उपयोग है:

MyObj.tree.rebuild()(documentation link)

इस MyObj पेड़ का निर्माण होगा।

5

मैनजी वास्तव में सही है, आपको पुनर्निर्माण के लिए मॉडल क्लास का उपयोग करने की आवश्यकता है।

हालांकि, अगर आप केवल एक विशिष्ट वस्तु और उसके वंश के लिए पेड़ के पुनर्निर्माण के लिए चाहते हैं, आप उपयोग कर सकते हैं:

MyObj.tree.partial_rebuild(tree_id)। मेरे लिए

+3

ध्यान दें कि partial_rebuild अभी तक एक आधिकारिक रिलीज का हिस्सा आज 0.5 के रूप में है जो नहीं है .5। इस प्रकार यदि आप पाइप partial_rebuild के माध्यम से स्थापित नहीं होंगे। किसी भी तरह आप सीधे github से मास्टर शाखा का उपयोग कर सकते हैं। इसे देखें: https://github.com/django-mptt/django-mptt/issues/250 .. –

+0

अब यह 0.6.0 रिलीज का हिस्सा है। – chhantyal

11

काम:

MenuItem.objects.rebuild() 
6

हाल MPTT संस्करण निम्न आदेश की आवश्यकता होती है लगते हैं। कम से कम यह आज मेरे लिए काम किया, हालांकि सामने पानी का छींटा इंगित करता है कि पेड़ प्रबंधक निजी होती है और शायद सीधे नहीं पहुँचा जा चाहिए:

MyObj._tree_manager.rebuild() 
+0

ध्यान दें कि MyObj वास्तविक मॉडल वर्ग होना चाहिए, न कि ऑब्जेक्ट। Django-MPTT 0.8.7 के साथ परीक्षण किया - यह मेरे टूटे हुए रिश्तेों का पुनर्निर्माण किया, लेकिन मेरी मूल श्रेणियों के साथ अभी भी एक मुद्दा था जो माता-पिता थे। – JxAxMxIxN

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^