2011-12-21 8 views
5

Tengo un sitio donde los usuarios pueden crear y editar sus propias listas.Django: UpdateView restringe por usuario

Estoy usando la vista genérica CreateView para permitir a los usuarios crear listas.

Me gustaría utilizar la vista genérica UpdateView para permitirles editar las listas, pero el login_required=True no es suficiente en este caso, ya que solo el creador de la lista puede editar su lista.

2 preguntas:

1) ¿Hay algún parámetro que puedo especificar en el URLconf para agregar esta restricción?

2) ¿Puedo imponer esas vistas genéricas que solo deberían funcionar con POST y no GET?

Gracias

Respuesta

4

Se podría anular get_queryset en el UpdateView:

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

1) se puede escribir decorador y utilizarlo misma manera que login_required decorador, es decir:

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) sí, ver decorators y Decorating class-based views

Cuestiones relacionadas