1

这是我的保存代码:

keys={"key1","key2"}
mydict={key: value for (key, value) in data.items() if key in keys}
m=Modelname(**mydict)
m.save()

在这里,data就像一个键和值的数组。我不想全部保存,只保存keys. 上面的保存工作很酷,但是如何更新呢?资源相同,但现在的操作是更新。我知道一种方法:

m=Modelname.objects.get(name="ramesh")
m.college = "some other name to update"
m.save()

现在它将使用新的学院名称进行更新。但是我怎样才能像使用保存一样直接执行此操作?data我指定包含键以及要更新的值。

4

2 回答 2

2

@San4ez 的建议是正确的。

请记住,.save即使您只想更改一列/字段,模型的方法也会将整行刷新/重写回数据库。

提供更好的性能和并发性的另一种方法是使用 Queryset 的update方法,它只更新选定的列。

因此,只要“名称”有一个unique约束(这样过滤器将只返回一个结果)。

Modelname.objects.filter(name="ramesh").update(**mydict)

现在正在做一些工作,以便未来版本的 django 可以在该.save方法上提供此功能。在这里查看更多

编辑:值得注意的是,如果您选择使用上述方法,django 不会发出任何 post/pre 信号,并且通常.save不会调用模型的方法,根据 django 的文档

于 2012-05-01T13:15:28.830 回答
0
m = Modelname.objects.get(name="ramesh")
for key, value in data.items():
    if key in keys:
        setattr(m, key, value)
m.save()
于 2012-05-01T11:12:45.987 回答