如何将对某些用户的访问限制为UpdateView?

san*_*blo 4 python django django-class-based-views

我有一个这样的架构:

models.py:

class Evento(models.Model):
    [...]
    user = ForeignKey(model=User)
Run Code Online (Sandbox Code Playgroud)

forms.py:

class EventoForm(forms.ModelForm):
    class Meta:
        model = Evento
Run Code Online (Sandbox Code Playgroud)

以及通用视图UpdateView的子类。我想将对该视图的访问限制为该Evento实例中指定的用户。最好的方法在哪里?

sin*_*nsv 5

调用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
Run Code Online (Sandbox Code Playgroud)