2013-01-13 21 views
8

मॉडल कच्चे कई तक पहुँचने:Django कई बनाया तालिका क्षेत्रों के लिए

class Subjects (models.Model): 
    name = models.CharField(max_length=100) 
    places = models.CharField(max_length=100) 


class Student (models.Model): 
    name = models.CharField(max_length=40) 
    lastname = models.CharField(max_length=80) 
    subjects = models.ManyToManyField(Subjects, blank=True) 

Django appname_student_subjects बनाता है जब मैं ऊपर मॉडल का उपयोग करें।

appname_student_subjects मेज, उदाहरण के लिए लग रहा है इस तरह:

id | student_id | subjects_id 
----------------------------------------- 
1 | 1   | 10 
2 | 4   | 11 
3 | 4   | 19 
4 | 5   | 10 
... 
~1000 

मैं subjects_id क्षेत्र तक कैसे पहुंचकर उसका गिनती कितनी बार subjects_id उपरोक्त तालिका में मौजूद है (और फिर इसके साथ कुछ करना) कर सकते हैं। उदाहरण के लिए: यदि आईडी 10 के साथ विषय टेम्पलेट प्रदर्शित करता है तो दो बार मौजूद होता है 2. मुझे पता है कि मुझे परिणाम के साथ "लेन" का उपयोग करना चाहिए, लेकिन मुझे नहीं पता कि topic_id फ़ील्ड तक कैसे पहुंचे। विदेशी कुंजी के साथ मैं पाश के लिए एक में इस तरह कर रहा हूँ:

results_all = Students.objects.filter(subject_id='10') 
result = len(results_all) 

और मैं टेम्पलेट के लिए परिणाम गुजरती हैं और पाश के लिए एक के भीतर इसे प्रदर्शित लेकिन यह एक विदेशी कुंजी है, तो यह काम नहीं कर रहा है।

उत्तर

14

आप सीधे तालिका के माध्यम से उपयोग कर सकते हैं।

num = (Students.subjects # M2M Manager 
       .through # subjects_students through table 
       .objects # through table manager 
       .filter(student_id=10) # your query against through table 
       .count()) 
+0

यहां एक छोटा विस्तार है, जो कुछ अन्य पाठक कुछ समय किसी दिन को बचाने कर सकते हैं बारे में एक नोट है: 'Students.subjects.through' काम करता है, लेकिन' Subjects.student_set.through' काम नहीं करता। यह एक डिजाइन परिप्रेक्ष्य से पूरी तरह से समझ में आता है, लेकिन वास्तविक जीवन में, लोग भूल जाते हैं कि कौन सा पहला स्थान है, और यह नहीं पता कि त्रुटि संदेश क्या कह रहा है। – AlanSE

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