2012-01-29 27 views
5

संभव डुप्लिकेट:
Django dynamic model fieldsDjango अंत उपयोगकर्ता परिभाषित फ़ील्ड, कैसे करें?

गुड मॉर्निंग लोग! परिदृश्य निम्नलिखित है। Django पर कुछ मॉडलों के लिए, मैं अंतिम उपयोगकर्ता को अपने क्षेत्र को परिभाषित करने की अनुमति देना चाहता हूं। यह बहुत अच्छा होगा अगर मैं ओआरएम जैसी सभी Django भयानक विशेषताओं को रख सकूं, इसलिए मैं मॉडल पर खोज करने के लिए अभी भी field__gte जैसे कॉल कर सकता हूं, फिर भी फील्ड प्रकार के अनुसार फील्ड सत्यापन है। मैंने ऐसा करने के दो तरीके सोचा है यह, और मैं नए सुझावों के लिए खुला से अधिक हूं। किसी भी प्रतिक्रिया की बहुत सराहना की जाएगी।

  1. पहले दृष्टिकोण, इकाई-गुण-मूल्य (http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model) है, जो पहले से ही django के लिए एक ऐप है। http://code.google.com/p/django-custom-field/ मुझे लगता है कि यह एक अच्छा समाधान होगा, लेकिन मैं "mymodel.objects.filter (custom_field_x = कुछ)" करने की क्षमता खो देता हूं। हो सकता है कि ओआरएम, किसी भी विचार को वापस पाने का कोई तरीका हो? लेकिन मैंने इस विधि के बारे में इतनी बुरी कहानियां सुनाई हैं कि मैं इसका उपयोग करने के लिए बहुत डरता हूं।

  2. दूसरा दृष्टिकोण उपयोगकर्ताओं से प्रत्येक के लिए एक डेटाबेस तालिका (शायद एक 1000 से अधिक नहीं) के लिए किया जाएगा। मैंने पढ़ा है कि django में इंस्पेक्टडब की लाइनों में कुछ है, जो वास्तव में जांचता है कि कौन से फ़ील्ड हैं और आपके लिए मॉडल तैयार करते हैं। यह उपयोगी हो सकता है लेकिन मुझे लगता है कि मुझे इस विशेष उपयोगकर्ता द्वारा बनाए गए फ़ील्ड को स्टोर करना चाहिए और किसी भी तरह से dinango बताओ, हे, हमारे पास इस मॉडल में भी इस क्षेत्र हैं। क्या यह संभव है? मुझे पता है कि प्रत्येक उपयोगकर्ता के लिए अलग-अलग टेबल रखना आम है, लेकिन इस परिदृश्य पर विचार करते हुए, आप इस विधि को कैसे रेट करेंगे, क्या प्रत्येक उपयोगकर्ता के लिए एक टेबल होना ठीक होगा?

मॉडल जो कस्टम फ़ील्ड की आवश्यकता है उदाहरण के लिए व्यक्ति है। वे एक कस्टम फ़ील्ड को पता, रक्त का प्रकार, या किसी अन्य चीज को स्टोर करने के लिए चाहते हैं।

अग्रिम धन्यवाद! आपका रविवार अच्छा हो!

बहुत समान: How to create user defined fields in Django - लेकिन केवल EAV, जो मैं से बचने के लिए चाहते हैं के बारे में बात करती है। मैं नए विचारों के लिए खुला हूं!

+1

मिला सबसे अच्छा संदर्भ कभी: http://stackoverflow.com/questions/7933596/django-dynamic-model-fields क्षमा करें, मेरे सवाल है कि एक का डुप्लिकेट है । मोड, इसे बंद करने के लिए स्वतंत्र महसूस करें। – Clash

उत्तर

1

एक दृष्टिकोण है जो आप वस्तुओं एक तरल पदार्थ की संरचना (के रूप में पूर्व निर्धारित कॉलम ऐसी कोई प्रतिबंध नहीं) है कि स्टोर करने के लिए अनुमति देता है इस तरह के MongoDB के रूप में एक NoSQL दस्तावेज़ के आधार पर समाधान का उपयोग करने के लिए है।

सकारात्मक:

  1. कस्टम फ़ील्ड प्रकार, खेतों के प्रकार की संख्या, आदि पर कोई प्रतिबंध नहीं
  2. बरकरार रखती है NoSQL की ORM कार्यक्षमता (django-mongodb)
  3. अन्य विभिन्न लाभों - जो आप के बारे में पढ़ सकते हैं ऑनलाइन
  4. से बचा जाता है EAV

विपक्ष:

  1. नोएसक्यूएल सर्वर
  2. सेटअप करने की आवश्यकता है NoSQL अवधारणाओं (दस्तावेज़ बनाम) पर अतिरिक्त ज्ञान आवश्यक है।टेबल)
  3. आप दो डेटाबेस बनाए रखने के लिए हो सकता है - यदि आप यह तय NoSQL के लिए अपने पूरे समाधान की ओर पलायन करने के लिए नहीं (multi-db)

संपादित करें:

इसके लायक पर निर्भर करता है कि उनका कहना है टिप्पणियों को पढ़ने के बाद जो नोएसक्यूएल समाधान आप साथ जाते हैं, आपको रिवर्सन सपोर्ट की आवश्यकता नहीं हो सकती है। कॉच डीबी, उदाहरण के लिए document versioning के लिए समर्थन में बनाया गया है।

+0

हाय burhan, आपके उत्तर के लिए धन्यवाद! मोंगोडब बहुत अच्छा लग रहा है। अफसोस की बात है कि मेरी साझा होस्टिंग इसका समर्थन नहीं करती है। अब मैं एक नया वेबहोस्टिंग ढूंढ रहा हूं (लेकिन यह एक और मामला है)। वैसे भी, मैं जो पूछना चाहता था वह है: क्या आपको पता है कि मोंगोडब का उपयोग करने से कोई अन्य ऐप टूट जाता है? उदाहरण के लिए, यदि मैं django-revisions (http://djangopackages.com/packages/p/django-revisions/) का उपयोग करता हूं, तो क्या यह अभी भी काम करेगा? अग्रिम में बहुत धन्यवाद! – Clash

+1

@Clash, हाँ, mongodb का उपयोग बाहरी django-apps को तोड़ देगा जो NoSQL डीबी का उपयोग करने की अपेक्षा नहीं करते हैं। तो django- संशोधन काम नहीं करेंगे। हालांकि, आप कई डेटाबेस सेट अप कर सकते हैं क्योंकि Django अब इसका समर्थन करता है। इसके साथ एकमात्र मुद्दा इन डेटाबेस में शामिल होने में सक्षम नहीं है। – Spike

+0

@ स्पाइक, मैं देखता हूं। मैं उन मॉडलों पर संशोधन का उपयोग नहीं कर पाऊंगा जो कस्टम फ़ील्ड्स का उपयोग करते हैं तो मुझे लगता है? आपके उत्तर के लिए बहुत धन्यवाद! – Clash

1

उपयोगकर्ता_defined_fields को संग्रहीत करने के लिए एक और मॉडल बनाने के बारे में क्या?

class UserDefinedField(models.Model): 
     #.................. 
     user = models.ForeignKey(User) 
     field_name = models.CharField(max_length=50) 
     field_value = models.TextField() 

तो फिर तुम क्या कर सकते हैं UserDefinedField.objects.filter(field_name=some_name,field_value=somevalue)

+1

मुझे लगता है कि यह ईएवी की एक छोटी सी भिन्नता है – Clash

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