Django 在验证 modelform 日期字段时期望格式错误
Django expects wrong format when validating modelform datefield
我有一个页面,用户可以在其中以 dd/mm/yyyy
格式输入一些日期。
在我的设置文件中我有这个:
DATE_INPUT_FORMATS = ('%d/%m/%Y','%Y/%m/%d', '%Y-%m-%d',)
USE_TZ = True
USE_L10N = True
TIME_ZONE = 'Europe/Rome
我用django bootstrap4 datetime picker plus
该字段呈现如下:(对于屏幕截图,我深表歉意,我无法在不转义的情况下复制 html,它看起来非常混乱)
问题
问题是当我以 dd/mm/yyyy 格式输入日期时,它使用美国格式 (mm/dd/yyyy) 来验证它们。因此,如果我输入 27/12/2021,它将尝试保存 [2021 年 12 月 27 日],但验证失败。阻止保存表单集。
我不明白的是,当我设置了三个单独的 DATE_INPUT_FORMATS
和 none 时,django 到底是从哪里想到它应该使用美国格式来验证日期的?美式格式?
这是一张图片,显示在页面上以正确的格式收集日期
响应:[{'start_date': ['Enter a valid date.'], 'end_date': ['Enter a valid date.']}]
表格
这是我现在所在的位置:
class EducationForm(forms.ModelForm):
# def clean_start_date(self):
# print(self.cleaned_data['start_date'])
# return datetime.strptime((self.cleaned_data['start_date']), '%Y-%m-%d')
# def clean_end_date(self):
# return datetime.strptime((self.cleaned_data['end_date']), '%Y-%m-%d')
class Meta:
model = Education
fields = ['start_date', 'end_date', 'institution', 'title']
# localized_fields = ('start_date', 'end_date',)
widgets = {
'start_date': DatePickerInput(attrs={
'data-provide' : 'datepicker',
'class' : 'form-control my-date-picker',
# 'data-date-format' : "DD/MM/YYYY"
},
options={
"format": "DD/MM/YYYY",
}),
'end_date': DatePickerInput(attrs={
'placeholder': 'Ongoing',
'data-provide' : 'datepicker',
'class' : 'form-control my-date-picker',
# 'data-date-format' : "DD/MM/YYYY"
},
options={
"format": "DD/MM/YYYY",
}),
模板
模板中没有任何特别的内容。我只是将日期时间字段呈现为 {{ field }}。
最终解决方案是将 USE_L10N = False
添加到我的设置文件中。
似乎除非指定,django 将忽略 DATE_INPUT_FORMATS
的内容
我有一个页面,用户可以在其中以 dd/mm/yyyy
格式输入一些日期。
在我的设置文件中我有这个:
DATE_INPUT_FORMATS = ('%d/%m/%Y','%Y/%m/%d', '%Y-%m-%d',)
USE_TZ = True
USE_L10N = True
TIME_ZONE = 'Europe/Rome
我用django bootstrap4 datetime picker plus
该字段呈现如下:(对于屏幕截图,我深表歉意,我无法在不转义的情况下复制 html,它看起来非常混乱)
问题
问题是当我以 dd/mm/yyyy 格式输入日期时,它使用美国格式 (mm/dd/yyyy) 来验证它们。因此,如果我输入 27/12/2021,它将尝试保存 [2021 年 12 月 27 日],但验证失败。阻止保存表单集。
我不明白的是,当我设置了三个单独的 DATE_INPUT_FORMATS
和 none 时,django 到底是从哪里想到它应该使用美国格式来验证日期的?美式格式?
这是一张图片,显示在页面上以正确的格式收集日期
响应:[{'start_date': ['Enter a valid date.'], 'end_date': ['Enter a valid date.']}]
表格
这是我现在所在的位置:
class EducationForm(forms.ModelForm):
# def clean_start_date(self):
# print(self.cleaned_data['start_date'])
# return datetime.strptime((self.cleaned_data['start_date']), '%Y-%m-%d')
# def clean_end_date(self):
# return datetime.strptime((self.cleaned_data['end_date']), '%Y-%m-%d')
class Meta:
model = Education
fields = ['start_date', 'end_date', 'institution', 'title']
# localized_fields = ('start_date', 'end_date',)
widgets = {
'start_date': DatePickerInput(attrs={
'data-provide' : 'datepicker',
'class' : 'form-control my-date-picker',
# 'data-date-format' : "DD/MM/YYYY"
},
options={
"format": "DD/MM/YYYY",
}),
'end_date': DatePickerInput(attrs={
'placeholder': 'Ongoing',
'data-provide' : 'datepicker',
'class' : 'form-control my-date-picker',
# 'data-date-format' : "DD/MM/YYYY"
},
options={
"format": "DD/MM/YYYY",
}),
模板
模板中没有任何特别的内容。我只是将日期时间字段呈现为 {{ field }}。
最终解决方案是将 USE_L10N = False
添加到我的设置文件中。
似乎除非指定,django 将忽略 DATE_INPUT_FORMATS