2013-04-29 152 views
0

我有模式是這樣的:默認屬性

class A(models.Model): 
    some_field = models.CharField(max_length=50, default='bbb') 

如果我創建新的對象是這樣的:

a1 = A() 
a2 = A(some_field="ccc") 
print "a1 {}".format(a1.some_field) 
print "a2 {}".format(a2.some_field) 

我應該得到

A1 BBB

a2 ccc

+0

你試過了嗎? – 2013-04-29 13:40:46

+0

我得到錯誤,需要some_field。爲什麼? – 2013-04-29 13:55:01

回答

0

從技術上說是的,但是這看起來並不像你提到的「some_field是必需的」錯誤。如果您希望允許表單接受空白值,則必須將some_field設置爲接受空白值。您需要將blank=True添加到您的字段構造函數中,以便驗證將通過並在數據庫中使用默認值。

您也永遠不會保存這些對象,因此它們實際上並未在數據庫中創建。

0

這取決於你想要做什麼。如果您不打算在表單中使用模型字段,則不需要添加blank=True。如果沒有給出值,default的值將足以使數據庫中的字段保持該值。另一方面,如果您打算在模型表單中使用該字段,則需要將blank=True添加到您的模型中,或者將required=False添加到模型中的字段中。

現在與您的問題有關,是的。這正是你應該得到的,如果你試圖這樣做。

+0

模型自己進行驗證,而不僅僅是在ModelForms中使用。當調用'is_valid'時,表單使用這些驗證。有關更多信息,請參閱[此處](https://docs.djangoproject.com/en/dev/ref/models/instances/#validating-objects)。 – Ngenator 2013-04-29 15:16:52

+0

我明白了,但我只是在沒有空白屬性的情況下測試了shell中的示例,它允許我將它保存到數據庫,只是使用默認值。但沒有空白,'ModelForm'沒有驗證。這是當我搜索文檔格式'Models'並看到這個:「請注意,這是不同於null。null是純數據庫相關的,而空白是驗證相關的。如果一個字段有空= True,表單驗證將允許條目如果一個字段爲空= False,則該字段將是必需的。「 – 2013-04-29 15:25:44

+0

我明白你的意思了,但他提到他得到驗證錯誤,所以我專注於表單驗證。我會在我的回答中澄清。 – Ngenator 2013-04-29 15:38:30