使用DeleteView时在网址中使用两个参数

时间:2019-03-13 16:37:59

标签: python django

我正在创建一个博客,我希望confirm delete comment位于以下网址路由post/<int:id>/comment/<int:pk>/上,但是当我这样做时,浏览器显示以下错误

  

找不到带有参数'(38,)'的'comment'的反向。 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 个答案:

答案 0 :(得分:1)

您的URL需要两个参数,因此您需要将两个参数传递给reverse

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

请注意,idpk通常是同一意思;您可能应该在网址格式中使用更清晰的名称,例如post_idcomment_id