首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Flask-WTF实现不需要的DateField

如何使用Flask-WTF实现不需要的DateField
EN

Stack Overflow用户
提问于 2015-01-04 22:18:27
回答 2查看 18K关注 0票数 28

我想要一个可选的DateField,但如果将其保留为空,则会出现"Not a valid date value“错误

我在wtforms的源代码中添加了一些日志,发现formdata.getlist(self.name)为此DateField返回u

我的表单代码如下:

代码语言:javascript
运行
复制
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')
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-22 00:31:03

这是一个非常古老的话题,但是有些人可能仍然会遇到同样的问题,所以我会给出我可能的答案。添加validators.Optional()在这里没有帮助,因为该字段在处理阶段之前被标记为error。

你可以像这样修补处理器的行为:

代码语言:javascript
运行
复制
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'))
票数 3
EN

Stack Overflow用户

发布于 2015-01-04 23:47:56

您正在寻找Optional验证器。

代码语言:javascript
运行
复制
start = DateField('Start Date', format='%m/%d/%Y', validators=(validators.Optional(),))
票数 47
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27766417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档