django model中的save()方法


Model.save(force_insert=Falseforce_update=Falseusing=DEFAULT_DB_ALIASupdate_fields=None)

id和pk

如果一個model里沒有顯示聲明哪一個字段(field)是主鍵(即在某個字段里聲明primary_key=True),則django會自動生成一個名為id的AutoFields作為主鍵。model里的主鍵都有一個別名叫做pk(primary_key的縮寫),無論這個主鍵是自動生成的還是我們指定的。使用pk和使用主鍵的名字是一樣的效果。

注意1:對於一個要新加入數據庫的model實例,在save()執行之前是無法知道它的id的,因為要算數據庫中已有多少個本model才能算出它的id值。

>>> b2 = Blog(name='Cheddar Talk', tagline='Thoughts on cheese.')
>>> b2.id     # Returns None, because b doesn't have an ID yet.
>>> b2.save()
>>> b2.id     # Returns the ID of your new object.

force_update和force_insert

這兩個參數一般較少用到,因為save()之后django執行的是UPDATE或者INSERT這兩條SQL語句的哪一條,遵循如下算法:

1.如果這個對象已經有主鍵而且主鍵的值是True的(即不是None或者空字符串等),就執行UPDATE。

2.如果沒有主鍵或者這條save()不會update任何字段,那么它就INSERT。

只有在某些特定情況下,需要強制save()執行INSERT或UPDATE時才會使force_update=True或force_insert=True(比如我要求能UPDATE就UPDATE,不能我也不取INSERT,那么我就把這個force_update參數設置為True)。

update_fields

用來指定哪些字段需要更新,別的不更新。默認是None,這樣所有字段都會更新一遍。有時候字段很多而我們只需要更新很少的字段,可以用這個參數來提高一下效率。注意要給它的是一個可迭代對象(比如list等)。如果給它一個空的可迭代對象,那么就什么都不更新(注意和None不同,如果等於None是更新全部字段)。

一旦update_fields參數不使用默認值None,那么這條save()語句就是強制執行UPDATE的。

product.name = 'Name changed again'
product.save(update_fields=['name'])

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM