Перенаправление к исходному сообщению после обновления просмотра

У меня есть представление обновления, которое работает как ожидалось. Единственная проблема заключается в том, что я не могу понять, как перенаправить обратно на пост, который был обновлен после отправки. Я считаю, что нахожусь на правильном пути с 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})
Вернуться на верх