如何限制特定用户对UpdateView的访问?

5 投票
1 回答
1650 浏览
提问于 2025-04-17 19:10

我有一个这样的结构:

在models.py文件中:

class Evento(models.Model):
    [...]
    user = ForeignKey(model=User)

在forms.py文件中:

class EventoForm(forms.ModelForm):
    class Meta:
        model = Evento

还有一个更新视图的子类UpdateView。我想限制只有特定的用户才能访问这个视图,这个用户是由Evento实例指定的。请问我该怎么做比较好呢?

1 个回答

6

在调用 dispatch 之后,所有的数据都会被保存,不管用户有没有权限。所以你必须在调用 dispatch 之前先检查一下权限。可以看看这个代码片段 http://djangosnippets.org/snippets/2426/。不过更好的方法是重新定义 get_object 方法:

def get_object(self, *args, **kwargs):
    obj = super(EditarEvento, self).get_object(*args, **kwargs)
    if obj.user != self.request.user:
        raise PermissionDenied() #or Http404
    return obj

撰写回答