通过kwargs更新Django模型
我该如何传递一个字典,这个字典包含了要更新的Django模型的字段?这不是用来创建一个对象,而是用来更新它。
举个例子:
obj = Object.objects.create(index=id, **fields)
7 个回答
13
你可以获取一个对象的查询集,然后对它进行更新:
model = Model.objects.filter(pk=pk)
model.update(**kwargs)
不过,这样做不会调用对象的 .save() 方法。我觉得这只会进行一次数据库查询。
需要注意的是,如果你没有过滤到一个对象(比如查询了多个对象:例如,如果你没有根据主键查询),那么它会更新所有这些对象。如果没有过滤到任何对象,那么数据库里就不会写入任何东西。
话说回来,我之前不知道Ignacio的解决方案。我觉得那个挺不错的。
19
def update_object(obj, **kwargs):
for k, v in kwargs.items():
setattr(obj, k, v)
obj.save()
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
32
只要主键(PK)相同,现有的那一行数据就会被覆盖。
obj = Object(index=id, **fields)
obj.save()