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
相关产品推荐
相关产品推荐

