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

Django保存商品评价时报user_id非空约束违反错误如何解决

问题修复方案

根因说明

你的Review模型中user字段设置为非空约束,同时ReviewForm的Meta配置里明确排除了user字段,表单不会自动处理该字段值。你在视图层处理表单提交时,没有给生成的Review实例绑定当前登录用户,因此直接保存时触发数据库非空约束报错。

修复方法

直接修改视图的post方法,在表单验证通过后先创建暂存实例,赋值user后再写入数据库即可,不需要修改模型字段约束:

def post (self, request, *args, **kwargs):
    form = ReviewForm(request.POST)
    if form.is_valid():
        # 先不提交到数据库,得到暂存的Review实例
        review_instance = form.save(commit=False)
        # 绑定当前登录用户
        review_instance.user = request.user
        # 正式写入数据库
        review_instance.save()
        return redirect('starting_page')
    return redirect('my_orders')

补充说明

  • 你已经给视图添加了LoginRequiredMixin,触发post请求的用户一定是已登录状态,request.user一定有有效值,无需额外做空值判断
  • 该方案完全符合你不修改user字段非空约束的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 06:06:03