You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django删除评论报错:Generic detail view需传入pk或slug

解决Django删除评论时的AttributeError问题

这个错误的核心是:你的CommentDeleteView作为通用详情视图,必须从URL里拿到要删除的评论的pk(主键)或者slug字段值,才能定位到要删除的对象,但你的URL配置、模板链接或者视图设置里没满足这个要求。下面一步步修正:

1. 修正URL配置

打开项目的urls.py,确保给CommentDeleteView的路由加上pk参数(用slug的话同理):

from django.urls import path
from .views import CommentDeleteView

urlpatterns = [
    # 其他路由...
    path('comments/<int:pk>/delete/', CommentDeleteView.as_view(), name='comment_delete'),
]

这里<int:pk>是关键,它会把URL里的数字作为主键传递给视图。

2. 配置CommentDeleteView

确保你的视图正确指定了模型,并且重写删除成功后的跳转页面:

from django.views.generic import DeleteView
from django.urls import reverse_lazy
from .models import Comment

class CommentDeleteView(DeleteView):
    model = Comment  # 指定要操作的模型是Comment
    # 如果你的Comment用slug而不是pk识别,就添加下面两行:
    # slug_field = 'slug'  # 模型里的slug字段名
    # slug_url_kwarg = 'slug'  # URL里对应的参数名

    def get_success_url(self):
        # 删除后跳转到评论所属的文章页面,这里假设文章详情页的路由名叫'post_detail'
        return reverse_lazy('post_detail', kwargs={'pk': self.object.post.pk})
        # 如果文章用slug识别,就改成 kwargs={'slug': self.object.post.slug}

3. 修正模板里的删除按钮链接

确保模板里的删除表单正确传递了评论的pk:

<!-- 假设你在遍历评论的循环里,每个评论对象是comment -->
<form method="post" action="{% url 'comment_delete' comment.pk %}">
    {% csrf_token %}
    <button type="submit" onclick="return confirm('确定删除这条评论吗?')">删除</button>
</form>

这里{% url 'comment_delete' comment.pk %}会生成带评论主键的URL,视图就能拿到对应的评论对象了。

常见错误排查

  • 有没有忘记在URL里加<int:pk>或者<slug:slug>?这是最常见的原因。
  • 模板里的url标签有没有传对参数?比如是不是漏传了comment.pk,或者参数名和URL里的不匹配?
  • 视图里有没有指定model?如果没指定,视图不知道要操作哪个模型,也会触发类似错误。

内容的提问来源于stack exchange,提问作者Ldnsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 16:42:17