背景:我正在从API中提取数据并创建一个类似于以下内容的列表。现在,此数据集每次将有50个条目,并且几乎每次将数据保存到模型中时都会更改。所以下面我创建了我的Django项目中发生的事情的压缩版本。同样使用djangos ORM,模型数据也被放入外部postgres数据库中。
我使用如下列表将数据插入模型:
list = [(1, "open", "hello"), (2, "closed", "hey"), (3, "in progress", "never"), (4, "open", "free")]
然后将这些值保存到模型“ Bug”中
for item in list:
b = Bug(key=item[0],
status=item[1],
description=item[2])
b.save()
现在说列表更改为此
list = [(3, "closed", "never"), (4, "closed", "free"), (5, "open", "never"), (6, "open", "great")]
(请注意,将key
的“ 3”条目从“进行中”更改为“已关闭”,将key
的“ 4”的条目也更改为“ close” 。这还会添加key
为“ 5”和“ 6”的条目)
利用第一个列表中现有的已保存模型数据,如何更新已保存的模型数据以反映第二个列表的更改?以及添加条目。
编辑:所以看来这段代码已经在执行我的预期
答案 0 :(得分:2)
您可以使用update_or_create
:
for item in list:
b = Bug.objects.update_or_create(
key=item[0],
defaults={'status': item[1], 'description': item[2]})
)
(此后您无需致电save
。)
修改
如果key
已经是主键,则您无需执行任何操作-原始代码可以正常工作。 Django将更新原始项目(如果存在),否则将其插入:请参见How Django knows to UPDATE vs INSERT。