2010-03-08 3 views
0

J'ai un modèle, SMTH comme ceci:gestionnaire de filtrage pour le modèle de django, personnalisé par l'utilisateur

class Action(models.Model): 
    def can_be_applied(self, user): 
     #whatever 
     return True 

et je veux remplacer sa valeur par défaut Manager. Mais je ne sais pas comment passer la variable d'utilisateur actuel au gestionnaire, donc je dois faire qch comme ceci:

[act for act in Action.objects.all() if act.can_be_applied(current_user)] 

Comment puis-je me débarrasser de lui en tout remplaçant le gestionnaire?

Merci.

Répondre

2

Depuis les gestionnaires ne sont que des méthodes, vous pouvez passer tout ce que vous voulez y:

class ActionManager(models.Manager): 
    def applied(self, user): 
     return [x for x in self.get_query_set().all() if x.can_be_applied(user)] 

Action.objects.applied(someuser) 

Bien que pas très efficace, il fait le travail.