2013-10-06 35 views
2

我知道,有一個類似的問題,其中(I have read),但我有一個問題,該問題。如何使Django DateTimefield不是必需的?

如何我forms.py雲:

class DataForm(forms.ModelForm): 
    start_date = forms.CharField(
     widget=widgets.DateTimePicker(attrs={'class': 'form-control', 'style': 'width:90%'}), 
     required=False 
    ) 
.... 
class Meta: 
    model = Data 

我的models.py卻在這一方面:

start_date = models.DateTimeField(null=True, blank=True) 

當我試圖保存方式:

if form.is_valid(): 
    form.save() 

我出現此錯誤:

[u"'' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format."] 

那有什麼問題?我想讓start_date字段可選。

回答

4

那是因爲你在DataForm聲明start_dateCharField,你應該使用,而不是forms.DateTimeField

您的字段不是必需的,因此用戶可以將其保留爲空。 這是在Django中發佈數據時發生的情況:

  1. 表單字段嘗試將原始數據轉換爲Python類型。
  2. 爲此,首先檢查是否可以在empty_values數組內找到原始數據(被視爲「空」的值列表,硬編碼到該字段的源代碼中)。
  3. 如果它發現empty_values中的值(在您的情況下就是這種情況),它會返回空值的正確Python表示形式。除非該字段是必需的,在這種情況下會產生ValidationError
  4. 如果該值不爲空,那麼它會繼續將其轉換爲Python的類型。
  5. 然後將返回值插入到您的模型中,或者無論您的表單做什麼。

在點3. forms.CharFieldforms.DateTimeField表現不同。 CharField找到空值並返回'',一個空字符串,而DateTimeField返回Nonemodel.DateTimeField的正確空白值是None而不是''

這就是爲什麼Django中引發異常:因爲你想分配給''models.DateTimeField,後者無法正常丟在一個日期,因爲它不承認''爲有效的空值的DateTimeField

你可以看到Django's source code更好地瞭解它是如何工作的,還有documentation編寫自定義字段和form and field validation

相關問題