2013-07-23 42 views
10

我在Django 1.5以下模型:Django model blank = False不起作用?

class Person(models.Model): 
    name = models.CharField(max_length=50) 

注意的是,根據https://docs.djangoproject.com/en/dev/ref/models/fields/ name.blank默認爲false,這意味着它必須被指定。

不過,我可以成功地創建一個Person對象爲:未指定

Person.objects.create() 

公告的名稱。到底是怎麼回事?

好了,從文檔的答案是:

注意,這不是空不同。 null與純數據庫相關,而空白與驗證相關。如果一個字段有空= True,表單驗證將允許輸入一個空值。如果一個字段有空白= False,則該字段將是必需的。

另一個陷阱:

注意,驗證器將不會自動保存的模型來運行,但如果您使用的是的ModelForm,將在包括在任何領域的運行驗證您的形成。

如果您不使用表單,那麼在保存之前調用clean方法是您的責任。

+0

首先,怎麼了這' name = ...'不要這樣做。 –

+0

你是什麼意思? – Lucas

+0

我相信Games是指縮進。不建議每個PEP-8編碼練習。 – bernie

回答

9

blank僅適用於形成場驗證作爲在管理,django的形式等
null另一方面是數據庫級空的列。

至於爲什麼在默認''空白的結果,我真的只是承認其爲「這就是它的工作方式」,但這裏就是它似乎是在django.db.models.Field

def get_default(self): 
     """ 
     Returns the default value for this field. 
     """ 
     if self.has_default(): 
      if callable(self.default): 
       return self.default() 
      return force_unicode(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 "" 
     #  ^this 
+0

我從來不知道。學到了新東西。 –

+0

@Yuji你說得對。從文檔:請注意,這是不同於null。 null與純數據庫相關,而空白與驗證相關。如果一個字段的值爲空,則表單驗證將允許輸入一個空值。如果一個字段有空白= False,則該字段將是必需的。 – Lucas

0

Django使用空字符串創建用戶。您實際上可以運行Person.objects.all(),它會爲您提供一個列表,如果將其保存到名爲user_list的變量並執行類似user_list[0]的操作,它將返回一個空字符串的用戶對象。我不知道如何或爲什麼這樣做。