django

2009-01-09 23 views
12

में आदेशित सूचियां मुझे बहुत ही सरल समस्या है। मुझे मॉडल बनाने की ज़रूरत है, जो आदेशित सूची के तत्व का प्रतिनिधित्व करता है। यह मॉडल इस तरह लागू किया जा सकता:django

class Item(models.Model): 
    data = models.TextField() 
    order = models.IntegerField() 

या इस तरह:

class Item(models.Model): 
    data = models.TextField() 
    next = models.ForeignKey('self') 

क्या तरीका पसंद किया जाता है? प्रत्येक समाधान में क्या कमी है?

+0

हाय! मुझे एक ही समस्या के साथ एक ही समस्या है। एक समाधान जिसे मैंने सोचा था, आपके 'समाधान 1' में मॉडल का उपयोग कर रहा है। लेकिन सब कुछ ले जाने के बजाय, मैंने केवल 'रॉर्डर्ड आइटम' के मान को बदल दिया। उदाहरण के लिए मैं ऑर्डर 9 और 10 के साथ आइटम के बीच एक आइटम ले जाना चाहता हूं, मैं आइटम के ऑर्डर को 9.5 में बदल दूंगा। क्या आपको लगता है कि यह लंबी टेबल के लिए बुरा हो सकता है? –

उत्तर

20

अनिवार्य रूप से, आपके द्वारा प्रस्तावित दूसरा समाधान एक लिंक की गई सूची है। डेटाबेस स्तर पर लागू लिंक्ड सूची आमतौर पर एक अच्छा विचार नहीं है। n तत्वों की एक सूची पुनर्प्राप्त करने के लिए, आपको n डेटाबेस पहुंच (या जटिल प्रश्नों का उपयोग करें) की आवश्यकता होगी। निष्पादन के अनुसार, ओ (एन) में एक सूची पुनर्प्राप्त करना बेहद कुशल नहीं है।

नियमित कोड में, लिंक की गई सूची का उपयोग सरणी की तुलना में बेहतर सम्मिलित प्रदर्शन प्राप्त करने के लिए किया जाता है (आसपास के सभी तत्वों को स्थानांतरित करने की आवश्यकता नहीं है)। अपने डेटाबेस में, सभी तत्वों को अद्यतन करने के लिए न केवल 2 प्रश्नों में है कि जटिल है:

UPDATE item.order = item.order + 1 FROM item WHERE order > 3 
INSERT INTO item (order, ...) VALUES (3, ...) 

मुझे लगता है कि यह सब और एक अच्छा व्यवस्थापक इंटरफ़ेस कार्यान्वित एक reuseable ऐप नहीं देख याद है, लेकिन मैं अभी लगता है नहीं कर सकते ...

संक्षेप में, समाधान # 1 का उपयोग करें और समाधान # 2 से दूर रहें जब तक कि आपके पास बहुत अच्छा कारण न हो!

+0

क्या यह ऐप आपने उल्लेख किया था? http://nyquistrate.com/django/orderedlist/ –

+0

दो और पुस्तकालय जो Django मॉडल पर "ऑर्डर" फ़ील्ड को प्रबंधित करने में मदद करते हैं https://pypi.python.org/pypi/django-positions/ और https://pypi.python.org/pypi/django-ordered-model/। Django पदों एक नज़र में बेहतर दिखता है। – Nathan

6

यह निर्भर करता है कि आप क्या करना चाहते हैं।

पहले एक है क्योंकि पहले एक तुम 'में डेटाबेस में किसी एक क्वेरी बनाने के लिए और सही क्रम

दूसरा एक बेहतर लगता है (दो मौजूदा तत्वों के बीच एक तत्व डालने के लिए में सभी डेटा प्राप्त करने के लिए बेहतर लगता है यदि संख्या अनुक्रमिक हैं तो डी को बहुत सारे आइटमों को बदलना होगा)

मैं पहले का उपयोग करता हूं, क्योंकि यह डेटाबेस तालिका बेहतर फिट लगता है, जो कि django हुड के पीछे मॉडल डेटा स्टोर करता है।

-6

एक और समाधान है।

class Item(models.Model): 
    data = models.TextField() 

तुम सिर्फ अचार या डेटा क्षेत्र और लोड इसे में मार्शल अजगर सूची कर सकते हैं। यह अद्यतन करने और पढ़ने के लिए अच्छा है, लेकिन खोज के लिए नहीं। एक विशिष्ट आइटम युक्त सभी सूचियों को ला रहा है।