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

使用Django更新数据库时data字段偶现为空的问题求助

可能的原因及解决方法
  • 字典键的语法隐患
    你代码里的data = { a: "a", b:"b", c:"c" }中,键a/b/c未加引号,Python会将其解析为变量。即便当前上下文有同名变量能正常打印,这也是不规范写法,建议统一改为字符串键:

    data = {"a": "a", "b": "b", "c": "c"}
    
  • 数据库字段类型不匹配
    如果model.data是Django的JSONField,无需用json.dumps()转字符串,直接赋值字典即可——Django会自动处理序列化:

    model.data = data
    model.save()
    

    若字段是CharField,要检查max_length是否足够,过长的JSON字符串会被截断为空;建议改用TextField避免长度限制。

  • 并发竞态冲突
    多个请求同时操作同一个实例时,会出现「读取-修改-保存」的竞态:比如请求A读取实例后,请求B修改并保存,A再保存就会覆盖B的操作,甚至清空字段。可以用两种方式解决:

    # 方式1:加锁避免并发
    model = Models.objects.select_for_update().get(id=id)
    model.data = json.dumps(data)
    model.save()
    
    # 方式2:直接更新,跳过实例读取
    Models.objects.filter(id=id).update(data=json.dumps(data))
    
  • 事务未正常提交
    如果函数处于事务上下文,若事务最终回滚,数据库不会保留修改。检查代码中是否有事务逻辑,确保事务正常提交。

  • 模型实例状态异常
    实例可能缓存了旧状态或被其他代码修改,可尝试刷新实例后再更新:

    model = Models.objects.get(id=id)
    model.refresh_from_db()
    model.data = json.dumps(data)
    model.save()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:54:57