2012-03-30 18 views
77

我總是讀,我應該使用Django模型管理器objects.create文檔在哪裏?

model = Model(a=5, b=6) 
model.save() 

但我剛纔看到有一個管理器功能創建的,因爲我看到了使用它的開源Django應用程序。

model = Model.objects.create(a=5, b=6) 
print model.pk 
1 

那麼有人建議使用它?或者還是更喜歡使用.save方法。我猜object.create會嘗試創建它,而保存可能會保存現有的對象,如果指定PK。

這些是我找到的文檔:https://docs.djangoproject.com/en/dev/topics/db/queries/#creating-objects

+11

爲什麼這個問題得到了否決票?我剛到這裏時遇到了同樣的問題,發現這很有用。 – Ferguzz 2012-04-05 21:17:00

+4

我也不知道,也許人們認爲它很愚蠢和明顯。不要太在乎它:我得到我的回答我很高興。我也搜查沒有結果,所以我問。 – 2012-04-06 04:13:19

回答

1

基本上這兩種方法是equivalentModel.objects.create的使用可能是首選,因爲它更適合Django的風格。等效

40
p = Person.objects.create(first_name="Bruce", last_name="Springsteen") 

到:

p = Person(first_name="Bruce", last_name="Springsteen") 
p.save(force_insert=True) 

的force_insert意味着一個新的對象將總是被創建。
通常你不需要擔心這個。但是,如果您的型號 包含您設置的手動主鍵值,並且該值在數據庫中已存在,則由於主鍵必須是唯一的,因此對create()的調用將失敗並顯示 IntegrityError。如果您正在使用手動主鍵,請準備好 處理該異常。

1

創建本質上是一樣的。下面是創建的源代碼。

def create(self, **kwargs): 
    """ 
    Creates a new object with the given kwargs, saving it to the database 
    and returning the created object. 
    """ 
    obj = self.model(**kwargs) 
    self._for_write = True 
    obj.save(force_insert=True, using=self.db) 
    return obj 

它創建一個實例並保存它。