2012-03-30 33 views
-1

我是新來的dJango和我遇到一個問題,而使用forms.DateField,例如我輸入「2011-01-01」和我的input_formats = ['%Y-%m-%d']所以它會明顯接受它,但是當我輸入值「2011-01-1」django仍然接受該格式,因爲Django會將該值讀作「2011-01-01」,我不希望發生這種情況,我想做一個驗證在哪裏,當我輸入一個值(「2011-10-1」)這樣說,這將引發一個錯誤......dJango forms.DateField

請幫助....謝謝....

OK ,我會解釋清楚...這是我的代碼: class Info(forms.Form): bday = forms.DateField(input_formats = [ '%Y%m%d'],label ='bday',error_messages = {'required':'請輸入您的出生日期','無效':'輸入的日期無效,應該是YYYYMMDD格式'})

#I want to put here a validation(any validation) 

,這裏是一個問題... 如果我把「201122」,這意味着2011年2月2,Django會接受它,因爲Django會自動轉換是「201122」爲「20110202」,我不希望這種情況發生,我想要做的是驗證,如果我只輸入6位數字它會引發一個錯誤,我將如何做到這一點,我試過每種可能的情況,但Django仍然自動轉換它...或者是否有可能使一個正則表達式爲forms.DateField?help pleaseeeeeeeeeeeeeeee ....

回答

2

May I問爲什麼? DateTime字段標準化爲python datetime對象,您可以根據自己的喜好進行格式設置。

無論如何,你可以用自定義字段來做到這一點。

import re 

class PickyDateField(forms.DateField): 
    def validate(self, value): 
     if not re.match(r'[0-9]{4}-[0-9]{2}-[0-9]{2}', value): 
      raise forms.ValidationError('Wrong date format.') 

# ... 
class SomeForm(forms.Form): 
    pickydate = PickyDateField() 
+0

這是正確的 - 你應該讓Django的正常化這一個Python DateTime對象,然後將其格式化後訪問時,你會喜歡的方式。 – Todd 2012-03-30 03:41:31

+0

好吧,我會解釋清楚...這是我的代碼: class Info(forms.Form): bday = forms.DateField(input_formats = ['%Y%m%d'],label ='bday' ,error_messages = {'required':'請輸入您的出生日期','無效':'輸入日期無效且應該爲YYYYMMDD格式'}) – obutsu 2012-04-02 01:28:05

2

無需編寫自定義表單字段即可實現此目的。相反,你可以驗證器添加到您的領域是這樣的:

from django.core.exceptions import ValidationError 

def my_super_validator(value): 
    if something_is_wrong: 
     raise ValidationError('Wrong date format') 

class SomeForm(forms.Form): 
    mydate = forms.DateField(validators=[my_super_validator])