दिलचस्प पोस्ट
पायथन 3 के लिए छवि पुस्तकालय Rails के बाहर रूबी स्क्रिप्ट में ActiveRecord का उपयोग कैसे करें? MySQL में संवेदनशील केस की तरह Matlab निष्पादन योग्य बहुत धीमा `Read` के साथ पासवर्ड पढ़ते समय मैं सितारे (*) कैसे गूंज करूँ? टुकड़ों के साथ नेविगेशन के ऊपर कार्रवाईबार Android के लिए Google डिस्क \ डॉक्स एपीआई Java.net.URL का प्रयोग करके HTTP अनुरोधों को आग और संभाल करने के लिए कनेक्शन क्वॉलिफाइड आश्रित नामों से पहले कीवर्ड "टाइपनाम" की आवश्यकता क्यों नहीं है, और योग्य योग्य नामों से पहले नहीं? .NET WinForms ऐप में फ़ॉन्ट डीपीआई को कैसे नियंत्रित करें कॉरस को सक्षम करने के लिए कब सुरक्षित है? मोंगोडीबी या अन्य दस्तावेज़ आधारित डेटाबेस सिस्टम का उपयोग कब किया जाए? क्या कोई केस असंवेदनशील है jQuery: चयनकर्ता शामिल है? एकाधिक जावास्क्रिप्ट फाइलों को एक JS फ़ाइल में जोड़ना Android में गतिविधियों के बीच एक गैर-आदिम प्रकार का डेटा पास करना

Django में विदेशी कुंजी ऑब्जेक्ट Serializing

मैं फ़्लैश और एंड्रॉइड दोनों क्षुधा के साथ प्रयोग करने के लिए Django में कुछ रेसिपुलर सेवाओं को विकसित करने पर काम कर रहा हूं I

सेवाओं का इंटरफ़ेस विकसित करना काफी आसान रहा है, लेकिन मैं ऐसी धारावाहिक वस्तुओं के साथ एक मुद्दा चला रहा हूं जिनके पास विदेशी कुंजी है और कई रिश्तों के कई हैं

मेरे पास एक मॉडल है:

class Artifact( models.Model ): name = models.CharField( max_length = 255 ) year_of_origin = models.IntegerField( max_length = 4, blank = True, null = True ) object_type = models.ForeignKey( ObjectType, blank = True, null = True ) individual = models.ForeignKey( Individual, blank = True, null = True ) notes = models.TextField( blank = True, null = True ) 

तब मैं इस मॉडल पर एक क्वेरी निष्पादित select_related() , जैसे कि select_related() , यह सुनिश्चित करने के लिए कि विदेशी कुंजी रिश्तों का पालन किया जाता है:

 artifact = Artifact.objects.select_related().get(pk=pk) 

एक बार मेरे पास ऑब्जेक्ट होता है, तो मैं इसे सीरियल कर देता हूं, और इसे मेरे दृश्य पर वापस कर देता हूं:

 serializers.serialize( "json", [ artifact ] ) 

यह वही है जो मुझे वापस मिलता है, ध्यान दें कि विदेशी कुंजी (ऑब्जेक्ट_प्रकार और व्यक्तिगत) केवल उनके संबंधित वस्तुओं के आईडी हैं

 [ { pk: 1 model: "artifacts.artifact" fields: { year_of_origin: 2010 name: "Dummy Title" notes: "" object_type: 1 individual: 1 } } ] 

यह बहुत अच्छा है, लेकिन select_related() का उपयोग करते समय मैं क्या उम्मीद कर रहा था कि यह स्वचालित ऑब्जेक्ट आईडी को न केवल संबंधित ऑब्जेक्ट के साथ विदेशी कुंजी फ़ील्ड को पॉप्युलेट करेगा।

मैं हाल ही में Django में कनवर्ट हूं, लेकिन केकपीएचपी के साथ विकसित होने में उचित समय लगाया है।

मैं केक ORM के बारे में वास्तव में क्या पसंद करता था कि यह संबंधों का पालन करेगा और नेस्टेड ऑब्जेक्ट्स डिफ़ॉल्ट रूप से बनाएगा, जब आप अपनी क्वेरी बुला रहे थे तो रिश्तों को खोलने की क्षमता होगी।

इसने इस तरह से सेवाओं को संक्षेप करने के लिए बहुत आसान बना दिया है जिससे मामले के आधार पर कोई भी हस्तक्षेप की आवश्यकता नहीं थी।

मुझे पता है कि डीजेंगो डिफ़ॉल्ट रूप से ऐसा नहीं करता है, लेकिन क्या एक ऑब्जेक्ट और इसके सभी संबंधित वस्तुओं को स्वचालित रूप से क्रमबद्ध करने का एक तरीका है? किसी भी सुझाव या पढ़ने बहुत सराहना की जाएगी

Solutions Collecting From Web of "Django में विदेशी कुंजी ऑब्जेक्ट Serializing"

मेरे पास एक समान आवश्यकता थी, हालांकि बिना किसी ख़राब प्रयोजनों के लिए मैं Django Full Serializers , मेरे मामले में, "पूर्ण" धारावाहिक मॉड्यूल का उपयोग करके मुझे क्या हासिल करने में सक्षम था। यह वडोफस्टफ का हिस्सा है और इसे नए बीएसडी लाइसेंस के तहत वितरित किया गया है।

वाडोफस्टफ यह बहुत आसान बना देता है उदाहरण के लिए आपके मामले में आपको निम्न करने की आवश्यकता होगी:

सबसे पहले, wadofstuff स्थापित करें।

दूसरा, अपनी settings.py फ़ाइल में निम्नलिखित सेटिंग जोड़ें:

 SERIALIZATION_MODULES = { 'json': 'wadofstuff.django.serializers.json' } 

तीसरा, सीरियलाइजेशन के लिए इस्तेमाल किए गए कोड में थोड़ा बदलाव करें:

 artifact = Artifact.objects.select_related().get(pk=pk) serializers.serialize( "json", [ artifact ], indent = 4, relations = ('object_type', 'individual',)) 

महत्वपूर्ण परिवर्तन relations कीवर्ड पैरामीटर है। केवल (मामूली) पकड़ वाला संबंधित मॉडल के नामों के संबंध में संबंध बनाने वाले खेतों के नाम का उपयोग करना है

चेतावनी

प्रलेखन से :

सामग्री धारावाहिकों का वाड एक मॉडल serializing करते समय 100% संगत डीजेगो धारावाहिक के साथ होता है। जब एक डाटा स्ट्रीम को Deserializer करना होता है तो Deserializer वर्ग वर्तमान में केवल मानक डीजेगो सीरियलइज़र द्वारा लौटाया गया सीरियल डेटा के साथ काम करता है

(महत्व दिया)

उम्मीद है की यह मदद करेगा।

अद्यतनः वास्तव में मनोज का समाधान थोड़ी पुरानी है, वड ऑफ स्टफ के सीरियलइज़र को कुछ समय के लिए अन-अपडेट किया गया है और जब मैंने ऐसा करने की कोशिश की तो ऐसा लगता है कि यह Django 1.6 का समर्थन नहीं करता।

हालांकि, डीजेंगो के आधिकारिक डॉक्टर पर एक नजर डालें। यह अंतर्निहित प्राकृतिक कुंजी का उपयोग करने के कुछ तरीके प्रदान करता है ऐसा लगता है कि डीजेंगो का अंतर्निर्मित सीरियललाइज़र प्राकृतिक कुंजी के भाग के रूप में छविफिल्ड का उपयोग करने में सहायता करता है। लेकिन यह आसानी से आपके स्व द्वारा निर्धारित किया जा सकता है

आप इस टिकट पर अधिक जानकारी पा सकते हैं:

संबंधों का पालन करने के लिए गहराई को निर्दिष्ट करके गहराई से क्रमबद्धता की अनुमति दें https://code.djangoproject.com/ticket/4656