通过kwargs更新Django模型

31 投票
7 回答
27375 浏览
提问于 2025-04-16 06:37

我该如何传递一个字典,这个字典包含了要更新的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()

撰写回答