Django: ограничение UpdateView для каждого пользователя
У меня есть сайт, где пользователи могут создавать и редактировать свои собственные списки.
Я использую общий вид CreateView, чтобы позволить пользователям создавать списки.
Я хотел бы использовать общий вид UpdateView, чтобы позволить им редактировать списки, но login_required=True
в этом случае недостаточно, так как только создатель списка может редактировать свой список.
2 вопроса:
1) Есть ли какой-либо параметр, который я могу указать в URLconf, чтобы добавить это ограничения?
2) Могу ли я наложить эти общие представления, которые должны работать только с POST и не получать?
спасибо
2 ответов
можно переопределить get_queryset
на UpdateView
:
def get_queryset(self):
base_qs = super(YourListUpdateView, self).get_queryset()
return base_qs.filter(user=self.request.user)
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) Да вижу декораторы и украшения на основе классов просмотров