2010-10-24 8 views
1
def by_this(self): 
     return super(MyModelManager, self).get_query_set().filter(this=True) 

def by_that(self): 
     return super(MyModelManager, self).get_query_set().filter(that=True) 

Si je fais MyModel.objects.by_this() ou by_that() cela fonctionne.Plusieurs méthodes de filtrage ModelManager

Mais je veux faire: MyModel.objects.by_this() by_that()

Répondre

0

MyModel.objects renverra votre type de ModelManager, mais by_this retourne une queryset.. Vous ne pouvez donc pas appeler by_that sur l'objet renvoyé et le chaînage ne fonctionne pas. Vous pourriez faire: MyModel.objects.by_this().filter(that=True). Ou définissez simplement une méthode by_this_and_that dans votre classe dérivée ModelManager.

0

Comme le dit ars, vos méthodes renvoient un jeu de requête. Donc, ce que vous devez faire est de créer une sous-classe personnalisée de QuerySet, qui contient les méthodes by_this et by_that, puis dans MyModelManager.get_query_set renvoyer votre jeu de sous-classes.

Questions connexes