python - In Django, how do you retrieve data from extra fields on many-to-many relationships without an explicit query for it? -


Django 1.0 में एक स्थिति को देखते हुए आपके पास:

  वर्ग प्लेयर (models.Model ): Name = models.CharField (max_length = 80) वर्ग टीम (models.Model): name = models.CharField (max_length = 40) खिलाड़ियों = models.ManyToManyField (प्लेयर, = 'TeamPlayer' के माध्यम से, related_name = 'teams') क्लास टीमप्लेयर (मॉडल। मॉडल): प्लेयर = मॉडल। फ़िनिगेकी (प्लेयर) टीम = मॉडल्स। फ़ॉरइन्गकी (टीम) कप्तान = मॉडल। बुलियन फिल्ड ()  

बहुत-से-कई रिश्ते आप एट्रिब्यूट्स का उपयोग कर संबंधित डेटा (टीम ऑब्जेक्ट पर "प्लेयर्स" विशेषता का उपयोग कर सकते हैं या प्लेयर ऑब्जेक्ट पर इसके संबंधित नाम के आधार पर "टीम" विशेषता का उपयोग कर सकते हैं)। जब किसी एक वस्तु को किसी टेम्पलेट के संदर्भ में रखा जाता है (उदाहरण के लिए टीम को टीम के रोस्टर को तैयार करने वाला टेम्पलेट प्रदान करने के संदर्भ में रखा जाता है), तो संबंधित वस्तुओं को एक्सेस किया जा सकता है (अर्थात टीमों के खिलाड़ी), लेकिन यह कैसे हो सकता है अतिरिक्त डेटा (उदाहरण के लिए 'कप्तान') संदर्भ में अतिरिक्त डेटा को जोड़ने के बिना संदर्भ में ऑब्जेक्ट से संबंधित वस्तुओं (उदाहरण के लिए टीम) के साथ पहुँचा जा सकता है?

मुझे पता है कि इसके खिलाफ सीधे क्वेरी करना संभव है अतिरिक्त डेटा प्राप्त करने के लिए मध्यस्थ तालिका। उदाहरण के लिए:

  TeamPlayer.objects.get (खिलाड़ी = 790, टीम = 168)। Captain  

या:

 < कोड> TeamPlayer.objects.filter में (टीम = 168): यदि x.captain: प्रिंट "% s (कप्तान)"% (x.player.name) अन्य: प्रिंट x.player.name  < / प्री> 

यह सीधे मध्यस्थ तालिका पर कर रहा है, फिर भी मुझे टेम्प्लेट के संदर्भ में अतिरिक्त डेटा डालने की आवश्यकता है (टीमप्लेयर पर क्वेरी का परिणाम) जो कि मैं ऐसा करने से बचने की कोशिश कर रहा हूं यदि ऐसी कोई चीज़ संभव हो।

तो, सवाल पूछने के 15 मिनट बाद, और मुझे अपना जवाब मिला।

डायर (टीम) का उपयोग करके, मैं teamplayer_set नाम वाला एक अन्य उत्पन्न विशेषता देख सकता हूं (यह प्लेयर पर भी मौजूद है)। T.teamplayer_set.all () में एक्स के लिए

  टी = Team.objects.get (pk = 168): यदि x.captain: प्रिंट "% s (कप्तान)"% (x। Player.name) अन्य: प्रिंट x.player.name  

सुनिश्चित नहीं है कि मैं कैसे उत्पन्न संबंधित_नाम को अनुकूलित करूँगा, लेकिन कम से कम मुझे पता है कि मैं टेम्पलेट से डेटा को अतिरिक्त जोड़े बिना प्राप्त कर सकता हूं संदर्भ में क्वेरी परिणाम।


Comments