WTForms - DateTimeLocalField 数据在提交后为 None
WTForms - DateTimeLocalField data is None after submit
使用 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
获取数据有什么帮助吗?
尝试将 DateTimeLocalField
的格式从
更改为
format='%Y-%m-%d %H:%M:%S'
至:
format='%Y-%m-%dT%H:%M'
提示:您可以在验证之前打印输入字段的实际内容,以确认 DateTimeLocalField
字段的格式正确。
我对同一个问题进行了广泛的研究,这是一个 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())
让我知道该解决方案是否适合您,或者是否找到了更好的问题解决方案。
使用 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')
使用 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
获取数据有什么帮助吗?
尝试将 DateTimeLocalField
的格式从
format='%Y-%m-%d %H:%M:%S'
至:
format='%Y-%m-%dT%H:%M'
提示:您可以在验证之前打印输入字段的实际内容,以确认 DateTimeLocalField
字段的格式正确。
我对同一个问题进行了广泛的研究,这是一个 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())
让我知道该解决方案是否适合您,或者是否找到了更好的问题解决方案。
使用 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')