2014-11-14 176 views
1

根據Django Model文檔,nullblank選項默認爲False。那麼如果我沒有明確提供,那麼IntegerField的默認值是什麼?此外,CharField和其他將有所幫助。Django字段的默認值是什麼?

+1

我沒有在這裏的django安裝,我不打擾通過源代碼來找出,但IIRC,如果你不提供默認的任何字段的默認值將是'無',這將轉化爲SQL'NULL' - 如果在字段定義中保留'null = False',那麼這當然會在數據庫級別引發異常(至少在任何適當的SQL數據庫上)。但是你最好自己嘗試一下(如果你已經有了一個django項目,這是一件五分鐘的事情)。 – 2014-11-14 19:04:09

+0

@brunodesthuilliers,謝謝。 – norbertpy 2014-11-14 19:09:23

回答

3

正如我們在現場方法

def has_default(self): 
    """ 
    Returns a boolean of whether this field has a default value. 
    """ 
    return self.default is not NOT_PROVIDED 

def get_default(self): 
    """ 
    Returns the default value for this field. 
    """ 
    if self.has_default(): 
     if callable(self.default): 
      return self.default() 
     return force_text(self.default, strings_only=True) 
    if (not self.empty_strings_allowed or (self.null and 
       not connection.features.interprets_empty_strings_as_nulls)): 
     return None 
    return "" 

看到這將是None,因爲empty_strings_allowed = FalseIntegerField,之後創建或保存你會得到ValidationError()因爲價值是不int()

爲對於CharField,您將得到「」空字符串,因爲CharField已有empty_strings_allowed = True

PS避免使用null=TrueCharFieldTextField作爲在Django文件建立說

避免使用基於字符串的領域,如CharField和 文本字段爲空,因爲空字符串值總是會被​​存儲爲空 字符串,而不是爲NULL。如果基於字符串的字段的值爲空= True,那麼 表示它有兩個可能的「無數據」值:NULL和空字符串 。在大多數情況下, 「沒有數據」有兩個可能的值是多餘的,Django慣例是使用空字符串,而不是NULL。

相關問題