2013-06-19 30 views
13

到目前爲止,我還沒有在Django的模型和表單中遇到空白,null和必需的明確解釋。Django模型和表單中的空白,空和必需


我知道每個默認值是以下內容:

blank = False 
null = False 
required = True 

我還知道:

blank=True(在models.py使用),是指在表格上級別,接受空表單 - 表單中不需要關聯的字段。

null=True(在models.py中使用),表示在數據庫級別上,空字符串將被存儲爲NULL而不是空的版本的關聯數據類型。

required=False(在forms.py中使用)表示不需要關聯的表單字段。


希望上面的信息將成爲他人一道很好地(請讓我知道是否有邏輯的任何缺陷,我會更新)。

我的問題是:

我什麼時候知道什麼時候使用blank=Truerequired=False。如果我的目標是製作一個不需要的表格字段,我可以在模型中使用blank=True來定義它,或者我可以使用required=False在表格中定義它。這是否意味着您可以在模型中定義blank=True,並在關聯的ModelForm中用required=True覆蓋此值?

此外,如果您使用常規表格(forms.Form)呢?由於表單與模型沒有關聯(除了通過視圖邏輯),如果再次發生,它們會相互矛盾嗎?

+0

當* what *與什麼矛盾時,如果一個表格與模型沒有關聯。 –

回答

2

這取決於要求。有時候我們決定在表單上強制字段,儘管在模型上它仍然不是必需的。但表格將確保該字段必須填寫。

你可以在模型上有null=True,然後你可以在窗體上強制該字段。但是,如果在模型上強制使用,則不能在表單中設置可選字段,這會導致稍後發生數據庫錯誤。

+0

如果模型中'null = True',則該字段在窗體上將是強制性的。模型中只有'blank = True'在相應的ModelForm中設置required = False。前 – krypto07

7

矛盾無所謂。我認爲這爲Django應用程序的開發帶來了靈活性。例如,如果您使用的是定義某些模型的第三方庫,並且它們設置了blank=True,但出於其他目的,您需要該字段爲必填字段,則可以在表單中修復該字段而不觸及第三方庫代碼。

這只是爲框架恕我直言,增加了一些靈活性,沒有帶來任何傷害。您可以將其用於您自己的目的。矛盾並不顯着。

希望這會有所幫助!

+0

謝謝,我已經燒燬的模型形式的這種非直觀的方面再次,這是有道理的,並且還給出了更多的動力形式。 – Joker

+0

你是最歡迎:) –

+2

這是一個很好的答案,這說明理由及其使用情況。 – flyingfoxlee