2010-04-26 124 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/