我正在尝试使用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设置没有运气。
感谢您的帮助。
答案 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文档: “将使用第一个有效的”
按顺序尝试格式