Перенаправление к исходному сообщению после обновления просмотра
У меня есть представление обновления, которое работает как ожидалось. Единственная проблема заключается в том, что я не могу понять, как перенаправить обратно на пост, который был обновлен после отправки. Я считаю, что нахожусь на правильном пути с get_success_url
, но не могу заставить его работать
view
class UpdateBuildLog(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
model = BuildLog
form_class = BuildLogupdateForm
template = 'blog/buildlog_update.html'
def get_object(self):
return BuildLog.objects.get(pk=self.kwargs["pkz"])
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
def get_success_url(self):
pk = self.kwargs["pkz"]
return reverse("build-log-view", kwargs={"pkz": pk})
def test_func(self):
post = self.get_object()
if self.request.user.id == post.author_id:
return True
return False
Урлы:
path('post/<int:pk>/build-log/<int:pkz>/', views.BuildLogDisplay, name='build-log-view'),
path('post/<int:pk>/build-log/<int:pkz>/delete/', views.BuildLogDelete, name='build-log-delete'),
path('post/<int:pk>/build-log/<int:pkz>/update/', UpdateBuildLog.as_view(), name='build-log-update'),
Вы допускаете ошибку в отношении reverse
Вы написали :
def get_success_url(self):
pk = self.kwargs["pkz"]
return reverse("build-log-view", kwargs={"pkz": pk})
Но в вашем url у вас есть :
path('post/<int:pk>/build-log/<int:pkz>/update/', UpdateBuildLog.as_view(), name='build-log-update')
Тогда get_success_url
должно быть :
def get_success_url(self):
pk = self.kwargs["pkz"]
return reverse("build-log-update", kwargs={"pkz": pk})
NB : Вам нужно сделать редирект на правильный url (здесь он build-log-update
).
Вам нужны оба pk
и pkz
в вашем реверсе:
def get_success_url(self):
pkz = self.kwargs["pkz"]
pk = self.kwargs["pk"]
return reverse("build-log-view", kwargs={"pkz": pkz, "pk": pk})