Django Tempus Dominus设置自定义日期格式后表单验证失效如何解决
报错原因
你在DatePicker的options中配置的format仅作用于前端日期选择器的显示和提交格式,Django后端的forms.DateField默认仅识别%Y-%m-%d等预设的日期格式,未匹配到你自定义的格式时就会抛出Enter a valid date的校验错误。
解决方法
给DateField添加input_formats参数,将前端提交的日期对应的Django格式加入校验列表即可,修改后的表单代码如下:
from django import forms # 多语言适配场景可导入以下工具 # from django.utils.formats import get_format_lazy class DateForm(forms.Form): date_field = forms.DateField( required=True, label='The Date', # 新增input_formats配置,按你的实际前端输出格式填写 # 中文环境下moment.js的LL格式对应 %Y年%m月%d日,可保留默认格式做兼容 input_formats=['%Y年%m月%d日', '%Y-%m-%d'], # 多语言场景可替换为自动读取本地化格式: # input_formats=get_format_lazy('DATE_INPUT_FORMATS'), widget=DatePicker( options={ 'minDate': '1900-01-01', 'maxDate': '2050-12-31', 'format': 'LL', }, ), initial='2001-01-01', )
如果配置format=False,前端会输出浏览器默认的日期格式,你只需将对应格式也加入input_formats列表即可正常校验。
内容的提问来源于stack exchange,提问作者Sundraw
相关产品推荐
相关产品推荐

