2011-10-06 34 views
0

我想使用SplitDateTimeWidget,但希望它接受日期 - 月 - 年格式。django:SplitDateTimeWidget忽略date_format

from django.forms.widgets import SplitDateTimeWidget 

class EventForm(forms.ModelForm): 
    class Meta: 
     model = Event 
     widgets = {'start': SplitDateTimeWidget(date_format='%d/%m/%Y')} 

的SplitDateTimeWidget接受date_format參數,這是我期望能夠用於驗證的日期輸入,但事實並非如此。

默認的小部件已被正確替換,但它忽略了date_format並堅持在默認的月份 - 日 - 年進行驗證。

我也嘗試設置DATE_FORMAT和DATE_INPUT_FORMATS設置沒有運氣。

感謝您的任何幫助。

回答

1

小工具日期格式只負責輸出,無關緊要的驗證。重要的是字段類型,而在SplitDateTimeField的情況下,它使用使用input_date_formats參數實例化的DateField和TimeField。

所以答案是:

class EventForm(forms.ModelForm): 
    class Meta: 
     model = Event 
     widgets = {'start': SplitDateTimeWidget(date_format='%d/%m/%Y')} 

    start = SplitDateTimeField(input_date_formats='d/m/Y', 
           input_time_formats='<whatever, or skip it>') 

注意input_date_formats是一個Django格式,http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date

+0

感謝,它的工作。一個更正:'input_date_formats'應該是'['%d /%m /%Y']' – omat

+0

在編輯時在字段中顯示一個值時,會忽略'date_format'。雖然'SplitDateTimeWidget(date_format ='%d /%m /%Y')'該值在字段中顯示爲'YYYY-MM-DD'。 'DATE_FORMAT'設置也被忽略。 :( – omat

1

我有同樣的問題,努力使SplitDateTimeField的日期部分接受的日期格式「% d /%米/%Y」。

以上通過薩芬的解決方案並沒有爲我工作(包括修正它由OMAT)

我終於通過重寫settings.py中的日期時間輸入格式默認列表中解決了這個問題:

DATETIME_INPUT_FORMATS = ('%d/%m/%Y %I:%M', '%Y-%m-%d %H:%M', '%Y-%m-%d', 
    '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M', '%m/%d/%Y', 
    '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M', '%m/%d/%y') 

我添加了所需的格式作爲列表中的第一個,所以它將優先於其他格式。

從Django文檔: 「格式將依次嘗試,使用第一個有效的」

5

這爲我工作:

class EventForm(forms.ModelForm): 

    start = SplitDateTimeField(input_date_formats=['%d/%m/%Y'], 
           input_time_formats=['%H:%M'], 
           widget=SplitDateTimeWidget(date_format='%d/%m/%Y', 
                  time_format='%H:%M'), 
           ) 

    class Meta: 
     model = Event