/ / किसी विशिष्ट क्रम में कई अन्य वस्तुओं को संदर्भित करने वाली वस्तु को कैसे संग्रहित करें? - अजगर, डीजेंगो

एक ऑब्जेक्ट को कैसे स्टोर करें जो एक विशिष्ट क्रम में कई अन्य ऑब्जेक्ट्स का संदर्भ देता है? - पायथन, django

मैं तीन मुख्य के साथ एक Django परियोजना विकसित कर रहा हूँवर्ग: वर्ग A, वर्ग B और वर्ग C। C वर्ग की वस्तुएँ एक विशिष्ट क्रम में A और B वर्ग की वस्तुओं से बनी हैं। वे सभी एक MySQL डेटाबेस में संग्रहीत हैं।

वर्तमान में मेरे पास है:

class A(models.Model):
name = models.CharField(max_length=250)

class B(models.Model):
name = models.CharField(max_length=250)

class C(models.Model):
name = models.CharField(max_length=250)
composed_of = PickledObjectField(blank=True)

इसलिए, C ऑब्जेक्ट्स बनाने के लिए मैं निम्नलिखित कार्य करता हूं:

c1 = C()
c1.composed_of = [a1, b4, a1, b1, a2, b2, b3, b4, a2, a5]
c1.save()

A के A1..a5 और B1 के B1..b5 उदाहरण हैं।

यह काम करता है लेकिन दो कारणों से बिल्कुल अच्छा नहीं है: 1. यह भयानक है जब मुझे इस क्षेत्र को क्वेरी करने की आवश्यकता है; 2. यदि A या B के इंस्टेंसेस को डेटाबेस से अपडेट या डिलीट किया जाता है, तो C इंस्टेंस में परिवर्तन नहीं किया जाता है।

इस प्रकार मेरा प्रश्न: मैं एक विशिष्ट क्रम में, अन्य वर्गों से संदर्भित उदाहरणों के साथ एक वर्ग कैसे बना सकता हूं?

मैं पायथन 2.7 के साथ Django 1.8 का उपयोग कर रहा हूं।

उत्तर:

जवाब के लिए 0 № 1

सबसे पहले, यदि आप अन्य मॉडलों को संदर्भित करना चाहते हैं, तो आपको कई-से-कई संबंधों का उपयोग करना चाहिए (models.ManyToManyField)।

दूसरा, चूंकि आपके पास अलग-अलग मॉडल हैं जिन्हें आप संदर्भित करना चाहते हैं, आपको Django से जेनेरिक विदेशी कुंजियों का उपयोग करने की आवश्यकता है contenttypes ढांचा, इसलिए आप अपने इच्छित किसी भी प्रकार से लिंक कर सकते हैं अब वहाँ एक अच्छा है ब्लॉग पोस्ट कई-कई संबंधों के लिए इसे लागू करने के तरीके के कोड के साथ।

तीसरा, चूंकि आप किसी रिश्ते की वस्तुओं को ऑर्डर करना चाहते हैं, इसलिए आपको प्रत्येक रिश्ते को एक के साथ प्रदान करने की आवश्यकता है order_number इसलिए आपको "तथाकथित" की आवश्यकता होगी through तालिका (यहां प्रलेखन)।

जब चीजें बदल रही हों तो इन ऑर्डरिंग नंबरों को प्रबंधित करना काफी जटिल हो सकता है, एक अच्छा पैकेज है जिसने इस समस्या को हल किया है: Django आदेश दिया-मॉडल, लेकिन मुझे यकीन है कि अन्य लोग भी हैं। "देखो के लिए" Django में कई-कई-कई रिश्तों का आदेश दिया गया है। आपको "सामान्य रूप से एम 2 एम संबंधों पर इसका उपयोग करने के लिए अनुकूलित करना होगा।"