WTForms-提交后,DateTimeLocalField数据为“无”

时间:2018-10-15 22:47:38

标签: python forms flask wtforms

使用POST请求提交表单后,每个Field数据都有其值,DateTimeLocalField除外。访问DateTimeLocalField的数据值是一种None

表格

class ArticleForm(FlaskForm):
    name = StringField('Name', validators=[DataRequired()])
    category = SelectField(u'Category', choices=categories.choices)
    town = StringField('Town', validators=[DataRequired()])
    minimal_price = IntegerField('Minimal price')
    article_image = FileField('Article_image', validators=[FileRequired()])
    time_left = DateTimeLocalField('Time to end', validators=[InputRequired()],
                              format='%Y-%m-%d %H:%M:%S')
    description = TextAreaField('Description', validators=[DataRequired()])

验证(已通过is_submitted测试,除article_form.time_left.data为None之外的所有其他功能)

if article_form.validate_on_submit():

    new_article = Article(name=article_form.name.data,
                          category=article_form.category.data,
                          town=article_form.town.data,
                          minimal_price=article_form.minimal_price.data,
                          article_image=name,
                          time_left=article_form.time_left.data, # <-- None
                          description=article_form.description.data,
                          user_id=current_user.id)

从DateTimeLocalField获取数据的任何帮助吗?

3 个答案:

答案 0 :(得分:2)

尝试从{p>更改DateTimeLocalField的格式

format='%Y-%m-%d %H:%M:%S' 

收件人:

format='%Y-%m-%dT%H:%M'

提示:您可以在验证之前打印输入字段的实际内容,以确认DateTimeLocalField字段的正确格式。

答案 1 :(得分:1)

我对相同的问题进行了广泛的研究,这是一个hack,但是我仍然从看起来像这样的标签获得时间戳:

<input id="time_left" name="time_left" required type="datetime-local" value="2018-11-15T04:44">

您基本上是从标记返回的标记中搜索时间戳

date = re.search('(\d{4})[/.-](\d{2})[/.-](\d{2})[T](\d{2})[:](\d{2})',
          str(form.time_left)).group())

让我知道该解决方案是否对您有用,或者是否找到了解决该问题的更好方法。

答案 2 :(得分:0)

使用wtforms.fields.html5.DateTimeLocalField代替wtforms.DateTimeLocalField。用日期和时间设置格式,并用“ T”分隔。如果希望将当前时间作为默认值,请设置默认参数。

from wtforms.fields.html5 import DateTimeLocalField

class InterviewForm(Form):
    posted = DateTimeLocalField('Posted:', default=datetime.today, format='%Y-%m-%dT%H:%M')