Django中如何将列表数据存入Model且不覆盖ID?
问题原因
Django 模型默认会自动添加 id 作为主键字段,并且它是模型定义的第一个字段。你使用 You(*d) 这种位置参数实例化时,列表里的第一个元素会被赋值给 id 字段,而非你预期的 Name,这就导致系统尝试覆盖ID的问题。editable=False 仅影响后台管理表单的编辑权限,不改变模型实例化时的参数匹配逻辑。
解决方案
1. 使用关键字参数实例化
直接通过字段名指定参数,避免位置匹配错误:
data = [["john", 16] ,["jax", 18]] for name, age in data: obj = You(Name=name, Age=age) # 若需要保存到数据库,调用 save() # obj.save()
如果数据量大或字段多,也可以通过字段名列表批量转字典:
field_names = ["Name", "Age"] data = [["john", 16] ,["jax", 18]] for d in data: obj = You(**dict(zip(field_names, d))) # obj.save()
2. 批量创建(推荐)
如果是要批量保存到数据库,使用 bulk_create 效率远高于循环调用 save():
data = [["john", 16] ,["jax", 18]] objs = [You(Name=name, Age=age) for name, age in data] You.objects.bulk_create(objs)
内容的提问来源于stack exchange,提问作者Phyo Arkar Lwin
相关产品推荐
相关产品推荐

