используя два параметра в URL при использовании DeleteView - PullRequest
0 голосов
/ 13 марта 2019

Я делал блог и хотел, чтобы confirm delete comment был на следующем URL-маршруте post/<int:id>/comment/<int:pk>/, но когда я делаю это, браузер показывает следующую ошибку

Обратное для «комментария» с аргументами (38,) «не найдено. 1 шаблон (ы) попробовал: ['post / (? P [0-9] +) / comment / (? P [0-9] +) / $']

код к программе приведен ниже. причина, по которой я хочу это сделать, заключается в том, чтобы иметь возможность перенаправить в представление post-detail после удаления

views.py

class CommentDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
    model = comment
    success_url = '/'

    def test_func(self):
        comment = self.get_object()
        if self.request.user == comment.user:
            return True
        return False

models.py

class comment(models.Model):
    post=models.ForeignKey(Blog, on_delete=models.CASCADE)
    user=models.ForeignKey(User, on_delete=models.CASCADE)
    content=models.TextField(max_length=160)
    timestamp=models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return '{}-{}'.format(self.post.title,str(self.user.username))

    def get_absolute_url(self):
        return reverse('post-detail', kwargs={"pk": self.pk})

urls.py

path('post/<int:id>/comment/<int:pk>/', views.comment_detail, name='comment'),
path('post/<int:id>/comment/<int:pk>/delete', views.CommentDeleteView.as_view(), name='comment-delete'),

1 Ответ

1 голос
/ 13 марта 2019

Ваш URL ожидает два аргумента, поэтому вам нужно передать два аргумента reverse.

def get_absolute_url(self):
    return reverse('post-detail', kwargs={"id": self. post_id, "pk": self.pk})

Обратите внимание, что id и pk обычно означают одно и то же;вам, вероятно, следует использовать более четкие имена в шаблоне URL, например, post_id и comment_id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...