मैं Django कस्टम मॉडल प्रबंधकों का उपयोग करने के सही तरीके के बारे में उलझन में हूं - दस्तावेज़ों के आधार पर आप एक मॉडल के लिए फ़िल्टरिंग के तरीके के रूप में प्रबंधकों की एक श्रृंखला बना सकते हैं। लेकिन क्यों फ़िल्टरिंग के लिए कार्यों की श्रृंखला के साथ एक प्रबंधक वर्ग नहीं बनाते? क्या एक विधि दूसरे की तुलना में बेहतर है? और क्यों?Django कस्टम मॉडल प्रबंधक
उदाहरण के लिए:
class MaleManager(models.Manager):
def get_query_set(self):
return super(MaleManager, self).get_query_set().filter(sex='M')
class FemaleManager(models.Manager):
def get_query_set(self):
return super(FemaleManager, self).get_query_set().filter(sex='F')
class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
sex = models.CharField(max_length=1, choices=(('M', 'Male'), ('F', 'Female')))
people = models.Manager()
men = MaleManager()
women = FemaleManager()
बनाम
class PersonManager(models.Manager):
def males(self):
return super(MaleManager, self).get_query_set().filter(sex='M')
def females(self):
return super(FemaleManager, self).get_query_set().filter(sex='F')
class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
sex = models.CharField(max_length=1, choices=(('M', 'Male'), ('F', 'Female')))
people = PersonManager()
Person.people.females() # to get list of females
Person.people.males() # to get a list of males
हां लेकिन दोनों विधियां क्वेरीसेट लौट रही हैं ... तो Person.objects.females.filter (first_name = 'जेन') अभी भी काम नहीं करेगा? ... –
@ 9-बिट्स: वास्तव में विधि को कॉल करना न भूलें। –
@ IgnacioVazquez-Abrams आपका क्या मतलब है? Person.people.females.filter (first_name = 'जेन') नहीं होगा तो विधि को फ़िल्टर करें? –