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

如何基于Slug而非PK实现博客评论并修复非空约束报错

解决Django中用Slug关联评论与文章时的NOT NULL约束错误

问题场景

提交评论时触发错误:

IntegrityError at /blogpost-2/comment/
NOT NULL constraint failed: blog_comment.post_id

需求是通过Slug而非主键(PK)关联博客文章与评论,但未能正确将评论绑定到对应文章。

错误原因

  1. 路由add_comment传递的是slug参数,但视图AddCommentView的form_valid方法中尝试获取不存在的self.kwargs['pk'],导致post_id未被赋值,违反数据库非空约束
  2. 后续尝试赋值post_slug无效,因为Comment模型中无该字段,评论需关联Post对象而非slug字符串

修复方案

修改AddCommentView的form_valid方法,通过传入的slug查询对应Post实例,再绑定到评论对象:

修改后的views.py代码

from django.shortcuts import get_object_or_404

class AddCommentView(CreateView):
    model = Comment 
    form_class = CommentForm
    template_name = "add_comment.html"

    def form_valid(self, form):
        # 通过slug获取对应文章,不存在则返回404
        post = get_object_or_404(Post, slug=self.kwargs['slug'])
        form.instance.post = post
        return super().form_valid(form)
    
    success_url = reverse_lazy('blog')

关键说明

  • 确保Post模型中定义了slug字段(建议设为唯一:models.SlugField(unique=True)),且文章对象已正确生成slug值
  • 使用get_object_or_404替代Post.objects.get,可在slug不存在时返回友好的404页面,避免服务器报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:07:23