Django:UpdateView限制每个用户

时间:2011-12-21 18:45:09

标签: django django-generic-views login-required

我有一个网站,用户可以在其中创建和编辑自己的列表。

我正在使用通用视图CreateView来允许用户创建列表。

我想使用通用视图UpdateView来允许他们编辑列表,但在这种情况下login_required=True是不够的,因为只有列表创建者可以编辑他/她的列表。

2个问题:

1)我是否可以在URLconf中指定任何参数来添加此限制?

2)我可以强加那些通用视图应该只适用于POST而不是GET吗?

由于

2 个答案:

答案 0 :(得分:5)

您可以覆盖get_queryset上的UpdateView

def get_queryset(self):
    base_qs = super(YourListUpdateView, self).get_queryset()
    return base_qs.filter(user=self.request.user)

答案 1 :(得分:2)

1)您可以编写装饰器并使用与login_required装饰器相同的方式,即:

def user_permitted(function):
    def decorator(function):
        def _wrapped_view(request, *args, **kwargs):
            # get obj from request
            if obj.user != request.user:
                return HttpResponseRedirect(reverse('forbidden'))
            return function(request, *args, **kwargs)
        return _wrapped_view
    return decorator(function)

2)是的,请参阅decoratorsDecorating class-based views