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

如何在Django的create()中通过循环引用模型字段创建记录?

解决方法

你的问题核心是没搞懂Django create() 方法的参数传递逻辑,直接用字典解包就能搞定,根本不需要写循环或者原生SQL。

直接用字典解包(最简便)

既然接口返回的JSON键和模型字段名完全一一对应,直接把字典用**解包后传给create()就行:

import requests
from .models import ModelOne

r = requests.get(url).json()
# 直接解包字典作为关键字参数
ModelOne.objects.create(**r)

这行代码完全等效于你想要的手动写fieldone=r['fieldone'], fieldtwo=r['fieldtwo']的效果。

处理可能的多余字段(可选)

如果接口返回的JSON里有模型不存在的字段,直接解包会报错,这时候可以先过滤字典,只保留模型有的字段:

# 获取ModelOne所有手动定义的字段名称(排除自动生成的如id)
model_field_names = [field.name for field in ModelOne._meta.get_fields() if not field.auto_created]
# 过滤出和模型字段匹配的键值对
filtered_data = {key: value for key, value in r.items() if key in model_field_names}
ModelOne.objects.create(**filtered_data)

为什么你的原写法不行?

你原来在create()里写循环、用ModelOne.field赋值的方式完全错误:

  1. create()的括号里只能放关键字参数,不能写循环语句;
  2. ModelOne.field是访问模型类的属性,不是给要创建的实例赋值,所以根本不会把数据传给create(),自然不会生成数据库记录。

总结

完全不需要用原生SQL,Django的QuerySet API就能完美解决这个需求,字典解包是最简洁高效的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 01:04:57