Django动态创建Model记录报错:ID期望数值类型却收到参数字符串
问题根因
你拼接出来的是完整的字符串,Python不会将这段字符串自动解析为模型构造函数的多个关键字参数,而是会把整个字符串作为第一个位置参数传入,而Django模型构造函数的第一个位置参数默认对应主键id字段,因此触发了「id期望接收数值但收到字符串」的类型错误。你手动写参数的写法是直接传入多个关键字参数,和传入单个字符串参数的运行逻辑完全不同。
修复方案
不要拼接参数字符串,直接构造关键字参数字典,再通过**语法将字典拆包为关键字参数传给模型构造函数即可,修改后代码如下:
for row in table: params = {} for ind, col in enumerate(config['header_columns']): params[col['title']] = row[ind] data = shipment(**params) data.save(using="integration")
额外注意
如果模型里QtyOrdered、QtyShipped这类字段是数值类型,DispatchDate是日期类型,你需要在构造参数字典时先把对应row[ind]的字符串值转换为对应类型,否则后续保存时可能会触发字段类型不匹配的报错。
内容的提问来源于stack exchange,提问作者user3431437
相关产品推荐
相关产品推荐

