में बाल नोड्स को पुन: क्रमबद्ध करना मैं recommendation के लिए django-MPTT (टोपी टिप Daniel Roseman) के बेन फ़िरशैन के fork का उपयोग कर रहा हूं।django-MPTT
मैं एक सामान्य माता-पिता साझा करने वाले नोड्स को फिर से ऑर्डर करने की कोशिश कर रहा हूं। मैं प्राथमिक कुंजी की एक सूची मिल गया है, इस तरह:
ids = [5, 9, 7, 3]
इन नोड्स के सभी है एक माता पिता, प्राथमिक कुंजी 1.
वर्तमान में साथ कहते हैं, इन नोड्स [5, 3, 9, 7]
आदेश दिया है, कैसे कर सकते हैं कर रहे हैं मैं उन्हें [5, 9, 7, 3]
पर पुन: ऑर्डर करें?
मैं कुछ इस तरह की कोशिश की है:
last_m = MyModel.get(pk = ids.pop(0))
last_m.move_to(last_m.parent, position='first-child')
for id in ids:
m = MyModel.get(pk = id)
m.move_to(last_m, position='right')
कौन सा मैं docs on move_to
प्रति, मैं क्या करना चाहते हैं उम्मीद थी, लेकिन यह कुछ भी बदलने की नहीं लगती। कभी-कभी ऐसा लगता है कि ids
में पहले आइटम को अपने माता-पिता का पहला बच्चा माना जाता है, कभी-कभी ऐसा नहीं होता है।
मैं सही move_to
के लिए किए गए दस्तावेज़ों की मेरी पढ़ने में हूँ कि एक नोड position=right
साथ n
और एक लक्ष्य जो n
का एक भाई है पर move_to
बुला n
चले जाएँगे लक्ष्य के बाद करने के लिए तुरंत?
यह संभव है कि मैंने इसे बाहर निकालने की कोशिश में अपनी मॉडल तालिका को खराब कर दिया है, तो शायद ऊपर दिया गया कोड वास्तव में सही है। यह भी संभव है कि ऐसा करने का एक और अधिक शानदार तरीका है (शायद वह जिसमें O(n)
शामिल नहीं है और O(n)
अद्यतन) शामिल हैं।
क्या मैंने कुछ गलत समझा है?
बोनस प्रश्न: क्या किसी दिए गए मॉडल के सभी उदाहरणों के लिए lft
और rght
मानों का पुनर्निर्माण करने के लिए django-MPTT को मजबूर करने का कोई तरीका है?
मैं संदिग्ध यह है कि के साथ कुछ था:
समाधान
last_m
हर बार फिर से लोड करने के लिए है। मैं इसे जाने दूंगा। क्या आपको बोनस प्रश्न के बारे में कोई जानकारी है? –@Daniel - उस पर लूप को बंद करना भूल गया। आपका जवाब बहुत अच्छा काम किया। अभी भी एमपीटीटी के बारे में थोड़ा परेशान है और पेड़ की खराब स्थिति में आने की संभावना है - क्या आपके पास इसका प्रबंधन करने के लिए कोई सुझाव है? –
पुराना सवाल, लेकिन यहां किसी भी व्यक्ति के लिए जो ठोकर खा रहा है - आप ModelName.tree.rebuild() के साथ एक एमपीटीटी ट्री का पुनर्निर्माण कर सकते हैं। यह उपयोगी है अगर आपने MPTTMeta order_insertion_by फ़ील्ड को परिभाषित किया है और अपने पेड़ के क्रम को अपडेट करने की आवश्यकता है। – Nagyman