默认模型管理器仅获取属于登录用户的对象

时间:2013-03-13 20:50:56

标签: django django-models django-managers

当我得到一个对象列表时,我只想要属于登录用户的对象。

我在想,也许这可以通过覆盖默认管理器在模型管理器中完成,但我不确定如何使用登录。这就是我到目前为止......

class GroupsManager(models.Manager):
    def get_query_set(self):
        return super(GroupsManager, self).get_query_set().filter(user=???????)

我是在正确的轨道上吗?我怎样才能实现目标?或者有更好的方法吗?

感谢。

1 个答案:

答案 0 :(得分:4)

您无权访问模型或模型管理器中的request(以及当前登录的用户)。因此,您可以编写一个接受用户实例的通用管理器方法,并仅返回属于该用户的对象:

class GroupsManager(models.Manager):
    def for_user(self, user):
        return self.get_query_set().filter(user=user)

并在您的模型中:

class Group(models.Model):
    objects = GroupsManager()

并在视图中:

def my_view(request):
    groups = Group.objects.for_user(request.user)