我有一个模特,像这样:
class Action(models.Model):
def can_be_applied(self, user):
#whatever
return True
我想覆盖它的默认管理器。但我不知道如何将当前用户变量传递给经理,所以我必须这样做:
[act for act in Action.objects.all() if act.can_be_applied(current_user)]
如何通过覆盖经理来摆脱它?
感谢。
答案 0 :(得分:2)
由于经理只是方法,你可以传递任何你想要的东西:
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)
虽然效率不高,但却可以胜任。
答案 1 :(得分:0)
这看起来很像django.contrib.auth
:http://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.models.User.get_all_permissions
也许你可以看看他们是如何实现这个功能的?