如何使用 Flask-WTF 实现不需要的 DateField
how to implement not-required DateField using Flask-WTF
我想要一个可选的 DateField,
但是如果留空
我会得到一个 "Not a valid date value" 错误
我在wtforms的源码中添加了一些日志,发现
formdata.getlist(self.name) returns [u''] 对于此日期字段
我的表单代码:
from wtforms import BooleanField, TextField, TextAreaField, PasswordField, validators, HiddenField, DateField, SelectField
from flask_wtf import Form
class EmployeeForm(Form):
id = HiddenField('id')
title = TextField('Title')
start = DateField('Start Date', format='%m/%d/%Y')
您正在寻找 Optional
验证器。
start = DateField('Start Date', format='%m/%d/%Y', validators=(validators.Optional(),))
相当古老的话题,但有人可能仍然 运行 遇到同样的问题,所以我会给出我可能的答案。
添加 validators.Optional()
在这里没有帮助,因为该字段在处理阶段早期被标记为错误。
您可以像这样修补处理器的行为:
class NullableDateField(DateField):
"""Native WTForms DateField throws error for empty dates.
Let's fix this so that we could have DateField nullable."""
def process_formdata(self, valuelist):
if valuelist:
date_str = ' '.join(valuelist).strip()
if date_str == '':
self.data = None
return
try:
self.data = datetime.datetime.strptime(date_str, self.format).date()
except ValueError:
self.data = None
raise ValueError(self.gettext('Not a valid date value'))
我想要一个可选的 DateField, 但是如果留空
我会得到一个 "Not a valid date value" 错误我在wtforms的源码中添加了一些日志,发现 formdata.getlist(self.name) returns [u''] 对于此日期字段
我的表单代码:
from wtforms import BooleanField, TextField, TextAreaField, PasswordField, validators, HiddenField, DateField, SelectField
from flask_wtf import Form
class EmployeeForm(Form):
id = HiddenField('id')
title = TextField('Title')
start = DateField('Start Date', format='%m/%d/%Y')
您正在寻找 Optional
验证器。
start = DateField('Start Date', format='%m/%d/%Y', validators=(validators.Optional(),))
相当古老的话题,但有人可能仍然 运行 遇到同样的问题,所以我会给出我可能的答案。
添加 validators.Optional()
在这里没有帮助,因为该字段在处理阶段早期被标记为错误。
您可以像这样修补处理器的行为:
class NullableDateField(DateField):
"""Native WTForms DateField throws error for empty dates.
Let's fix this so that we could have DateField nullable."""
def process_formdata(self, valuelist):
if valuelist:
date_str = ' '.join(valuelist).strip()
if date_str == '':
self.data = None
return
try:
self.data = datetime.datetime.strptime(date_str, self.format).date()
except ValueError:
self.data = None
raise ValueError(self.gettext('Not a valid date value'))