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

Django添加首个商品到购物车触发order_id非空约束完整性错误

报错原因
  • 核心问题出在Order模型的主键定义上:你手动指定order_id = models.IntegerField(primary_key=True)作为主键,但Django默认不会为普通IntegerField类型的主键自动生成自增值。你在else分支调用Order.objects.create(user=request.user)创建订单时,没有传入order_id的数值,数据库插入时该字段为null,直接触发非空约束报错。
  • 从你写的打印逻辑也可以验证这个判断:三个打印语句只有x会输出,y和z不会打印,因为create方法执行时就已经抛出异常中断了代码运行。
修复方案

两种方案选其一即可,改完后需要执行python manage.py makemigrations和python manage.py migrate生效模型修改:

  1. 不需要保留order_id作为主键字段的场景:直接删除Order模型中order_id = models.IntegerField(primary_key=True)这行代码,Django会自动为模型生成默认的自增id字段作为主键,无需手动赋值即可正常创建订单。
  2. 需要保留order_id作为主键字段的场景:将该字段的类型修改为自增类型,代码改为order_id = models.AutoField(primary_key=True),如果你的订单量较大可以用BigAutoField适配更大的数值范围,修改后Django会自动生成自增的主键值,创建订单时无需手动传参。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:18:03