Страница не найдена - Текущий путь, совпадает с последним.

Я создал представление обновления. Я хочу добавить кнопку в пост, которая направляет к представлению обновления. Однако при нажатии на кнопку вы получаете эту ошибку.

404 Page not found
post/<int:pks>/build-log/<int:pk>/update/ [name='build-log-update']
post/75/build-log/127/update/, matched the last one.`

Причина возникновения этой ошибки заключается в том, что при нажатии на кнопку происходит переворачивание PK. Пример. /post/127/build-log/75/ после нажатия кнопки /post/75/build-log/127/update/ вы видите, что она переворачивает PK.

Если просто добавить update к хорошему url, он работает нормально. Я не могу понять, почему он переворачивает pks

html:

<a class="delete-btn" href='{% url "build-log-delete" pk=log.post_id pkz=log.pk %}'>Delete</a>
<a class="update-btn" href='{% url "build-log-update" pk=log.post_id pkz=log.pk %}'>Update</a>

Урлы:

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:pks>/build-log/<int:pk>/update/', UpdateBuildLog.as_view(), name='build-log-update')

модель:

class BuildLog(models.Model):
    title = models.CharField(max_length=100)
    content = RichTextUploadingField(blank=True, null=True)
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    post = models.ForeignKey('Post', on_delete=models.CASCADE)

    def get_absolute_url(self):
        return reverse('build-log-view', kwargs={'pkz': self.pk})

view:

class UpdateBuildLog(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model = BuildLog
    form_class = BuildLogupdateForm
    template = 'blog/buildlog_update.html'
    

    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)
            


    def test_func(self):
        post = self.get_object()
        if self.request.user.id == post.author_id:
            return True
        return False    

Урл базового поста и урл удаления имеют pk в качестве первого захваченного значения, а урл обновления имеет pk в качестве второго захваченного значения.

'post/<int:pk>/build-log/<int:pkz>/'
'post/<int:pk>/build-log/<int:pkz>/delete/'
'post/<int:pks>/build-log/<int:pk>/update/'

Мне пришлось передать это в представление.

def get_object(self):
return BuildLog.objects.get(pk=self.kwargs["pkz"])
Вернуться на верх