2014-11-25 151 views
0

在MySQL,SQL表達式低於:如何通過使用django orm使一個字段值等於同一個表中的另一個字段值?

udpate table set one_field=another_field 

那麼如何讓它使用Django的ORM的成功?例如:

在模型A中,有3個字段:ID,a_value 在模型B中,有3個字段:ID,b_value 現在我想要b_value的值等於a_value加b_value。表達應該是這樣的:b_value = b_value + a_value。但是django orm中的F()不能用於不同的模型。我如何通過在較少的代碼中使用django orm來實現這一點。順便說一下,我的數據有點大,大約2000k。

回答

1

對於原題:

for obj in Model_Name.objects.all(): 
    obj.one_field = obj.another_field 
    obj.save() 

如果你有一個大的數據庫,你可以使用批量更新。 https://docs.djangoproject.com/en/dev/topics/db/queries/#updating-multiple-objects-at-once

希望這會有幫助

+0

謝謝。我認爲F就是我想要的。我的數據非常大。 – no13bus 2014-11-25 07:56:45

+0

但在文檔中,它表示:如果嘗試使用F()對象引入連接,將引發FieldError。當我更新我的字段時,它使用其他表的字段值。是否還有其他更好的方法來解決此問題?謝謝。 – no13bus 2014-11-25 08:42:33

+0

基本上,用F(),你只能更新那些在一個Django模型中的字段。只要「one_field」和「another_field」都在同一個模型中,F()就可以工作。但是,如果您嘗試根據「Model_2」中的「another_field」的值更新「Model_1」中的「one_field」,那麼F()將不起作用,因爲它不支持連接。那麼您可能有(): obj.one_field = obj.another_field obj.save()'this這個方法在我的答案中使用了我在建議的方法中使用的方法 – Ymartin 2014-11-25 09:07:02

相關問題