इस Django ऐप ट्यूटोरियल में क्या चॉइस_सेट है?


144

Django ट्यूटोरियल में यह लाइन है, अपना पहला Django ऐप, भाग 1 लिखते हुए :

p.choice_set.create(choice='Not much', votes=0)

choice_setइसे अस्तित्व में कैसे कहा जाता है और यह क्या है?

मुझे लगता है कि choiceभाग Choiceट्यूटोरियल में उपयोग किए जाने वाले मॉडल का निचला संस्करण है , लेकिन क्या है choice_set? क्या आप विस्तार से समझा सकते हैं?

अद्यतन: बेन के उत्तर के आधार पर , मैंने यह प्रलेखन: "पिछड़े" रिश्तों का पालन किया


मुझे सिर्फ उस दस्तावेज से जुड़ा होना चाहिए, यह मेरे उत्तर से अधिक स्पष्ट है।
बेन जेम्स

@ जेन जेम्स: नहीं, मैं इसकी सराहना करता हूं कि इसे एक अलग तरीके से तैयार किया गया है, विशेष रूप से ओआरएम क्या कर रहा है इसका विस्तार। Django दस्तावेज़ीकरण कई बार terse जा सकता है।
पीटर मोर्टेनसेन

40
यह पूछने के लिए धन्यवाद, मैं इस बात से उलझन में था क्योंकि वे इसे ट्यूटोरियल में नहीं समझाते हैं।
क्लेडियो

4
वाह, यह एक नौसिखिया के लिए कोड की एक भरी हुई पंक्ति है। मेरे लिए बाधा यह समझ रही थी कि हमें एक चॉइस ऑब्जेक्ट मिल रहा है, जो प्रश्न से संबंधित है, फिर उसे बढ़ाने के लिए यह पसंद है। एक के बाद एक। संबंधित प्रबंधक अवधारणा को इस बिंदु पर ट्यूटोरियल में उल्लेख नहीं किया गया है, इसलिए यह एक वास्तविक ठोकर हो सकती है।
फ्रोजनजिम

@PeterMortensen क्या आप उस दस्तावेज़ का अद्यतन कर सकते हैं जहाँ यह वर्णित है? धन्यवाद
एमएच

जवाबों:


178

आपने एक विदेशी कुंजी बनाई है, Choiceजिस पर प्रत्येक एक से संबंधित है Question

तो, प्रत्येक में Choiceस्पष्ट रूप से एक questionफ़ील्ड है, जिसे आपने मॉडल में घोषित किया है।

Django के ORM से संबंध पीछे की ओर इस प्रकार Questionस्वचालित रूप से प्रत्येक उदाहरण कहा जाता है पर एक क्षेत्र पैदा करने में भी foo_setजहां Fooएक साथ मॉडल है ForeignKeyकि मॉडल के लिए क्षेत्र।

choice_setएक उदाहरण के लिए संबंधित वस्तुओं के RelatedManagerक्वेरीसेट बना सकते हैं , जैसेChoiceQuestionq.choice_set.all()

यदि आप उस foo_setनामकरण को पसंद नहीं करते हैं जिसे Django स्वचालित रूप से चुनता है, या यदि आपके पास एक ही मॉडल की एक से अधिक विदेशी कुंजी है और उन्हें अलग करने की आवश्यकता है, तो आप related_nameतर्क का उपयोग करके अपना स्वयं का ओवरराइडिंग नाम चुन सकते हैं ForeignKey


धन्यवाद। मैं अभी बहुत कुछ जानता हूं। क्या एक "प्रबंधक" च्वाइस_सेट नहीं है? (जो वर्ग क्वेरीसेट का एक उदाहरण लौटा सकता है)। या यह एक ही बात है?
पीटर मोर्टेंसन

2
आप सही हैं, यह RelatedManagerक्वेरी बना सकता है।
बेन जेम्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.