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

Django如何将JSON键值对赋值给字段名匹配的模型对象

实现方法

直接用Python内置的动态属性赋值方法就能实现,额外加层字段合法性校验避免异常即可,补全后的完整函数如下:

def upload_object_values(model, json_values):
    if json_values:
        # 遍历字典副本移除id、外键字段,避免遍历过程中字典长度变化触发运行时错误
        for key in json_values.copy():
            # 用endswith判断后缀比切片判断更稳妥,不会因为键名长度不足3抛索引错
            if key.endswith('_id') or key == 'id':
                json_values.pop(key)
        
        # 逐个给模型字段赋值
        for field, value in json_values.items():
            # 先确认模型存在同名字段再赋值,跳过不存在的字段避免AttributeError
            if hasattr(model, field):
                setattr(model, field, value)
        
        # 持久化保存
        model.save()

逻辑说明

  • 核心赋值逻辑靠setattr(model, 字段名, 字段值)实现,效果和手动写model.name = 'world'这类硬编码赋值完全一致,能自动匹配字典里的键和模型同名字段
  • 加hasattr()校验是为了兼容json里混入模型未定义字段的场景,不会因为脏数据直接抛错中断流程
  • 把原来的切片判断json_value[-3:] == '_id'换成了字符串自带的endswith('_id')方法,避免键名长度小于3的时候触发索引越界错误

用给出的示例数据测试:清洗后的json是{'notes': 'hello', 'name': 'world', 'phone': None},遍历后三个字段都会正确赋值到model实例上,调用save()方法就能完成数据落库。

内容的提问来源于stack exchange,提问作者Prosy A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:45:33