更新Django对象

时间:2018-04-19 09:43:04

标签: python django django-queryset

我是一个对象: -

a = Model.objects.get(id=1)

和对象a的数据属性字典。

update_data = {
colA: 1,
colB: 2,
colC: 3,
}

现在,我想更新对象a。我该怎么办?

注意: - .update()适用于queryset,而不适用于该对象。此外,我无法a.colA=1,因为在这种情况下,我已在每个密钥上使用setattr

有什么方法可以直接更新对象吗?

3 个答案:

答案 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)