python – 我可以设置wtforms DateTimeField也只接受DateTime值吗?

我想让我的应用程序的用户输入Date或DateTime.有没有办法用单个字段实现这一目标?

dateCreated = DateField('Date created',validators[required(message='Input must be of YYYY-MM-DD format.')])

sessionDate = DateTimeField('Date',validators=[required(message='Input must be of YYYY-MM-DD HH:MM:SS format.')])

接受其中一个.有没有办法让一个领域接受?

解决方法

这可以通过创建一个新的字段子类来完成,该子类将接受日期格式并返回datetime.datetime(但可以很容易地修改以返回datetime.date).

此实现基于wtforms.fields.DateTimeField(source)

class LenientDateTimeField(Field):

    def __init__(self,label=None,validators=None,formats=None,**kwargs):
        super(LenientDateTimeField,self).__init__(label,validators,**kwargs)
        if formats is None:
            self.formats = ['%Y-%m-%d %H:%M:%s','%Y-%m-%d']
        else:
            self.formats = formats
        self.format = None

    def _value(self):
        if self.raw_data:
            return ' '.join(self.raw_data)
        else:
            return self.data and self.data.strftime(self.format) or ''

    def process_formdata(self,valuelist):
        if valuelist:
            date_str = ' '.join(valuelist)
            for fmt in self.formats:
                try:
                    self.data = datetime.datetime.strptime(date_str,fmt)
                    # If a datetime.date is required,do:
                    # datetime.datetime.strptime(date_str,fmt).date() 
                    self.format = format
                except ValueError:
                    self.data = None
                else:
                    break
            if self.data is None:
                message = 'Value did not match any of these formats: {}'.format(','.join(self.formats))
                raise ValueError(self.gettext(message))

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...