Gestionnaires de modèles personnalisés Django
Je suis confus au sujet de la façon correcte d'utiliser Django modèle personnalisé des gestionnaires de base sur les docs en vous pouvez créer une série de dirigeants pour un modèle comme un moyen de filtrage. Mais pourquoi ne pas créer un gérant de classe avec une série de fonctions de filtrage? Est une méthode meilleure que l'autre? et pourquoi?
Par exemple:
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()
contre
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
source d'informationauteur 9-bits
Vous devez vous connecter pour publier un commentaire.
Avec la première méthode, vous pouvez écrire:
ou
Pour la seconde méthode get_query_set est "hériter" de modèle, puis il la requête de retour ensemble, sans personnalisation. Je ne sais pas une raison pour jeter votre deuxième méthode, si vous utilisez l'interface d'administration, vous devez vérifier que c'est supporté.
Également, pour la deuxième méthode, vous devriez corriger votre question. Est
Lire django gestionnaire de doc: "Vous pouvez remplacer un Gestionnaire de base de QuerySet en substituant le Gestionnaire.get_query_set() la méthode. get_query_set() doit retourner un QuerySet avec les propriétés dont vous avez besoin."
Édité 2017 Être prudent,
get_query_set
est renommé de djanto 1,7 àget_queryset
. Plus d'info à La modification d'un gestionnaire initial de QuerySet