2010-04-26 113 views
58

如何在同一个查询集上运行更新和select语句,而不是必须执行两个查询,一个选择对象,一个更新对象?Django更新对象

在SQL等价会是这样的:

update my_table set field_1 = 'some value' where pk_field = some_value 

回答

105

使用查询集object update method

MyModel.objects.filter(pk=some_value).update(field1='some value') 
+38

只是一个公平的警告......如果你这样使用'update'方法则附加到该模型或其他“代码的东西”的任何信号将不会运行针对对象。只是一个人烧谁的指针:) – 2012-01-26 06:01:47

+0

@ DMactheDestroyer老兄感谢有价值的信息。那么我们应该使用旧的更新方式吗? (即)获得并保存? – 2015-07-17 05:39:27

+0

@学习得好,这一切都取决于你的情况。 'update'方法适用于批量更新,但在使用时会引发一些警告,您需要查看附加到该对象的任何信号,这些信号可能还需要手动触发 – 2015-07-17 15:19:20

27

Django的数据库对象使用用于创建和修改对象相同的save()方法。

obj = Product.objects.get(pk=pk) 
obj.name = "some_new_value" 
obj.save() 

的Django如何知道要UPDATE与INSERT
如果对象的主键属性被设置为计算结果为真的值(即以外的值 无或空字符串) ,Django执行一个UPDATE。如果 对象的主键属性未设置,或者如果UPDATE未更新,则Django执行INSERT。

参考:https://docs.djangoproject.com/en/1.9/ref/models/instances/