我是一个对象: -
a = Model.objects.get(id=1)
和对象a
的数据属性字典。
update_data = {
colA: 1,
colB: 2,
colC: 3,
}
现在,我想更新对象a
。我该怎么办?
注意: - .update()
适用于queryset,而不适用于该对象。此外,我无法a.colA=1
,因为在这种情况下,我已在每个密钥上使用setattr
。
有什么方法可以直接更新对象吗?
答案 0 :(得分:1)
我认为你可以做到
a = Model.object.get(id=1)
a.__dict__.update(update_data)
答案 1 :(得分:0)
您可以使用.update()
这样的方法:
Model.objects.filter(id=1).update(**update_data)
或者您也可以更新单个对象(在update_data
dict中迭代):
a = Model.objects.get(id=1)
for name in update_data:
setattr(a, name, update_data['name'])
# don't forget to save the object after modifying
a.save()
答案 2 :(得分:0)
为了直接考虑已构建的字典更新,您可以先过滤对象然后轻松更新数据,filter()
比get()
更快(*我已经测试了小数据库大小)
正如您在评论中所说,如果您只有对象(模型实例)和字典,您可以按如下方式编写:
Model.objects.filter(id=a.id).update(**update_data)
性能结果(在小db大小上测试) 在[4]中:g = Genres.objects.last()
In [6]: %timeit Genres.objects.get(id=g.id)
518 µs ± 10.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [7]: %timeit Genres.objects.filter(id=g.id)
74.2 µs ± 807 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)