WTForms - 提交后 DateTimeLocalField 数据为 None

Din*_*har 4 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()])
Run Code Online (Sandbox Code Playgroud)

验证:经测试is_submitted,除了所有的工作article_form.time_left.dataNone

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)
Run Code Online (Sandbox Code Playgroud)

任何帮助获取数据DateTimeLocalField

小智 6

尝试更改DateTimeLocalFieldfrom的格式

format='%Y-%m-%d %H:%M:%S' 
Run Code Online (Sandbox Code Playgroud)

到:

format='%Y-%m-%dT%H:%M'
Run Code Online (Sandbox Code Playgroud)

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


小智 6

使用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')
Run Code Online (Sandbox Code Playgroud)