2012-07-30 20 views
24

मैं उपयोगकर्ता वर्ग ऑब्जेक्ट से और कई से अधिक रिश्तों को बनाना चाहता हूं।Django कई से कई (एम 2 एम) एक ही मॉडल से संबंध

class MyUser(models.Model): 
    ... 
    blocked_users = models.ManyToManyField(MyUser, blank=True, null=True) 

सवाल अगर मैं अंदर ही वर्ग संदर्भ का उपयोग कर सकते है:

मैं कुछ इस तरह की है। या मुझे ManyToManyField में "MyUser" की "self" कीड़ा का उपयोग करना है? या ऐसा करने के लिए कोई और (और बेहतर) तरीका है?

उत्तर

42

तकनीकी तौर पर, मैं बहुत यकीन है कि "MyUser" या "स्व" काम करेंगे, जब तक कि यह या तो मामले में एक स्ट्रिंग हूँ। आप वास्तविक वर्ग MyUser पास नहीं कर सकते हैं।

हालांकि, दस्तावेज़ हमेशा "स्वयं" का उपयोग करते हैं। "स्वयं" का उपयोग करना वास्तव में क्या हो रहा है इसके बारे में और अधिक स्पष्ट नहीं है, लेकिन यह कक्षा के नाम परिवर्तनों के लिए अभद्र है। उदाहरण के लिए, यदि आपने बाद में MyUser से SomethingElse बदल दिया है, तो आपको "MyUser" के किसी भी संदर्भ को अपडेट करने की आवश्यकता होगी। समस्या यह है कि चूंकि यह एक स्ट्रिंग है, इसलिए आपका आईडीई आपको त्रुटि पर सतर्क नहीं करेगा, इसलिए आपके लापता होने का एक बड़ा मौका है। "स्वयं" का उपयोग करने से कोई फर्क नहीं पड़ता कि कक्षा का नाम अब या भविष्य में क्या है।

+0

स्पष्टीकरण के लिए धन्यवाद :) – Ron

23
class MyUser(models.Model): 
    ... 
    blocked_users = models.ManyToManyField("self", blank=True) 
+0

धन्यवाद, बीमार कोशिश करें – Ron

+0

"स्वयं" काम नहीं करता है। Block_users = models.ManyToManyField ("MyUser", blank = True, null = True) –

+3

मैंने "MyUser" नहीं कहा, मैंने कहा "स्वयं": https://docs.djangoproject.com/en/dev/ref /models/fields/#django.db.models.ManyToManyField.symmetrical – Goin

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