Вот проблема: у меня есть представление Обновления с переопределенным методом get_object:
class MyUpdateView(SuccessMessageMixin, LoginRequiredMixin, UpdateView):
some code here:
def get_object(self, queryset=None):
obj = UpdateView.get_object(self, queryset=None)
if not obj.author == self.request.user:
redirect(reverse_lazy("app:url")) # or reverse instead , no difference
return obj
p.s. object.author привязан через внешний ключ к пользовательской модели (в нашем случае self.request.user)
В этом представлении я хочу разрешить редактировать запись только тем пользователям, которые создали именно эту запись. Я знаю, как это сделать через get_queryset или через UserPassesTestMixin, но оба метода вызывают ошибки. Вместо этого мне нужно перенаправить пользователя, который не является автором, обратно на страницу, откуда он пришел, или на определенный URL (параметрический).
В этом случае (код ниже) работает нормально, появляется 404, так что логика работает. Я попробовал это через веб-сайт: автор может редактировать запись, а не автор вызвал 404.
# in this case it forks fine, 404 appears :
def get_object(self, queryset=None):
obj = UpdateView.get_object(self, queryset=None)
if not obj.author == self.request.user:
raise Http404
return obj
Но в первом примере редирект по какой-то причине не работает.
Я пытался - get_queryset
или UserPassesTestMixin
, но это не то, что мне нужно
autor = request.user - разрешить редактировать запись
author! = Request.user - перейти на предыдущую страницу или на определенный URL + сообщение
Если у кого-то есть идеи, как использовать перенаправление в этом случае, пожалуйста, ответьте. Иметь день
--- решение ---
def get(self, request, **kwargs):
if self.get_object().author == self.request.user:
return UpdateView.get(self, request, **kwargs)
else:
messages.add_message(request, messages.WARNING, "You can only change your own entries")
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))