2010-10-02 11 views
5

मेरे पास दो मॉडल हैं जिनके पास किसी 'माध्यम' तालिका के साथ कई तरह के संबंध हैं?क्या मैं कई सारे रिश्तों में प्रबंधक जोड़ सकता हूं?

class Bike(models.Model): 
    nickname = models.CharField(max_length=40) 
    users = models.ManyToManyField(User, through='bike.BikeUser') 

BikeUser वर्ग

class BikeUser(models.Model): 
    bike  = models.ForeignKey(Bike) 
    user  = models.ForeignKey(User) 
    comment = models.CharField(max_length=140) 

मैं उन के साथ काम करने के लिए बाइक वर्ग के लिए कार्यक्षमता जोड़ने के लिए चाहते हैं, वहाँ ऐसा करने का एक सबसे अच्छा अभ्यास तरीका है।

bike.bikeusers_set.commonMethod() 

या

bike.bikeusers.commonMethod() 

क्या सबसे अच्छा होगा: मैं बाइक वर्ग के लिए भी कई विधियां जोड़ने से बचने के लिए और नहीं बल्कि के माध्यम से

कुछ की तरह काम करने के लिए प्रबंधक के कुछ प्रकार है चाहते हैं इसे पूरा करने का तरीका?

उत्तर

6

आपके पास बाइकयूसर मॉडल होने के बाद, आप मॉडल में एक कस्टम प्रबंधक जोड़ सकते हैं।

कुछ की तरह:

class BikeUserManager(models.Manager): 
    def commonMethod(): 
     pass 

class BikeUser(models.Model): 
    bike  = models.ForeignKey(Bike) 
    user  = models.ForeignKey(User) 
    comment = models.CharField(max_length=140) 
    objects = BikeUserManager() 

लेकिन आप केवल यह BikeUser मॉडल से उपयोग कर सकते हैं: http://docs.djangoproject.com/en/dev/topics/db/managers/#controlling-automatic-manager-types

:

BikeUser.objects.commonMethod() 

क्या आप चाहते हैं एक संबंधित प्रबंधक के रूप में इस प्रबंधक का उपयोग करने के लिए है

प्रबंधक वर्ग में use_for_related_fields=True जोड़ें।

class MyManager(models.Manager): 
    use_for_related_fields = True 
+0

धन्यवाद, यह एक आकर्षण की तरह काम करता है! हाउवर, अगर मैं प्रबंधक को एक त्वरित बाइक बाइक.बाइकसर_सेट.commonMethod() से प्रबंधक को कॉल करता हूं, तो मैं सामान्य विधि के भीतर से "बाइक" तक कैसे पहुंचूं? (क्या यह एक नया प्रश्न होना चाहिए?) – Joelbitar

+0

मुझे लगता है कि आपको इसे फ़ंक्शन पैरामीटर के रूप में जोड़ना होगा: सामान्य मोड (स्वयं, बाइक) को डिफ करें और इसे इस तरह उपयोग करें: bike.bikeuser_set.commonMethod (बाइक) – OmerGertel

+0

जो कुछ मैं करता हूं 'मैं कर रहा था, मैंने सोचा कि एक बेहतर तरीका था, वैसे भी आपको बहुत धन्यवाद! – Joelbitar

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