Estoy confundido acerca de la forma correcta de usar gestores de modelos personalizados de Django: en base a los documentos, puede crear una serie de gerentes para un modelo como una forma de filtrar. ¿Pero por qué no crear una clase de administrador con una serie de funciones para filtrar? ¿Un método es mejor que el otro? ¿y por qué?Gerentes de modelos personalizados de Django
Por ejemplo:
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()
frente
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
Sí, pero los dos métodos son retornar querysets ... ¿así que no funcionaría Person.objects.females.filter (first_name = 'Jane')? ... –
@ 9 bits: no olvides llamar realmente al método. –
@ IgnacioVazquez-Abrams ¿qué quieres decir? ¿No llamaría Person.people.females.filter (first_name = 'Jane') al método y luego filtrar? –