更新Django对象

68bkxrlz  于 2023-06-25  发布在  Go
关注(0)|答案(3)|浏览(110)

我有一个对象:-

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

以及对象a的数据属性的字典。

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

现在,我想更新对象a。我该怎么做?
注意:-.update()作用于查询集,而不是对象。另外,我不能执行a.colA=1,因为在这种情况下,我在每个键上都使用了setattr
有没有办法直接更新对象?

gk7wooem

gk7wooem1#

你可以像这样使用.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()
gzszwxb4

gzszwxb42#

我觉得你可以

a = Model.object.get(id=1)
a.__dict__.update(update_data)
a0x5cqrl

a0x5cqrl3#

对于直接更新,考虑到字典已经构建,您可以首先过滤对象,然后轻松更新数据,而且filter()get()更快(* 我已经在小数据库大小上测试过)
正如你在评论中所说,如果你只有对象(模型示例)和字典,你可以这样写:

Model.objects.filter(id=a.id).update(**update_data)

性能结果(在小数据库大小上测试)在[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)

相关问题