django:SplitDateTimeWidget忽略date_format

时间:2011-10-06 14:30:00

标签: django django-forms django-widget

我正在尝试使用SplitDateTimeWidget,但希望它以日 - 月 - 年格式接受日期。

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设置没有运气。

感谢您的帮助。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

窗口小部件日期格式仅负责输出,与验证无关。重要的是字段类型,在SplitDateTimeField的情况下,它使用DateField和TimeField,它们使用input_date_formats参数进行实例化。

所以答案是:

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

答案 2 :(得分:1)

我遇到了同样的问题,试图让SplitDateTimeField的日期部分接受日期格式为'%d /%m /%Y'。

Marat上面的解决方案对我不起作用(包括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文档: “将使用第一个有效的”

按顺序尝试格式