gpt4 book ai didi

html - Wtforms.fields.html5 DateField 在 Flask 中不能像普通的旧 DateField 一样工作

转载 作者:太空狗 更新时间:2023-10-29 14:57:11 25 4
gpt4 key购买 nike

我在使用 WTF-Forms 让 HTML5 日期选择器为 Flask 中的表单提供值时遇到问题。如果我将 HTML5 DateField 放到普通的旧 Vanilla WTF-Forms DateField 中,相同的表单会按预期工作。

出于好奇:版本:Python 3.5.2,Flask:0.11.1,Flask-WTF:0.12

相关代码为:

型号:

class Order(db.Model):
__tablename__ = 'orders'
paid_date = db.Column(db.DateTime, nullable=True)

表单不应该有什么不同,但为了完整起见,这里是 order-update.html 的片段:

    <div class="form-group">
{{ form.paid_date.label }}
{% if form.paid_date.errors %}
{% for error in form.paid_date.errors %}
<p class="error-message">{{ error }}</p>
{% endfor %}
{% endif %}
{{ form.paid_date }}
</div>

最小 Controller :

@app.route('/orders/update/<int:order_number>', methods=['GET', 'POST'])
def update_order(order_number):
order = Order.query.get(order_number)
if request.method == 'POST':
if not form.validate():
return render_template('update-order.html', form=form, order=order)
else:
form.populate_obj(order)
db.session.commit()
return redirect(url_for('user')
elif request.method == 'GET':
return render_template('update-order.html', form=form, order=order)

以下是适用于表单声明的内容:

from flask_wtf import Form
from wtforms import DateField

class UpdateOrderForm(Form):
paid_date = DateField('Date Order Paid', format='%m/%d/%y',
render_kw={'placeholder': '6/20/15 for June 20, 2015'})
submit = SubmitField('Update Order')

而以下将中断:

from flask_wtf import Form
from wtforms.fields.html5 import DateField

class UpdateOrderForm(Form):
paid_date = DateField('Date Order Paid', format='%m/%d/%y',
render_kw={'placeholder': '6/20/15 for June 20, 2015'})
submit = SubmitField('Update Order')

为了描述这种行为,我用普通的 DateField 呈现了一个带有字符串输入的表单(它也在 form.populate_obj() 之后显示当前值,它允许我坚持一个新的日期,例如 9/12/16 ,并且它通过 form.paid_date 传回 Controller 是 DateField ,值为 09/20/16form.paid_date.data=2016-09-20 。这通过了验证并提交给数据库。

当我切换到 HTML5 日期选择器时,如果有它会非常好,我会呈现一个带有日期选择器的表单(顺便说一句,我想将其设置为对象中的当前日期),该表单具有 form.paid_date,如上所示,即, DateFieldvalue 相同。但是,日期选择器显示 mm/dd/yyyy 。因此,如果我手动或使用选择器输入 09/20/2016 并提交, form.paid_date.data 会返回 None 。此外,我还有

process_errors = <class 'list'>: ['Not a valid date value']

raw_data = <class 'list'>: ['2016-09-20']

所以我看到数据已返回,但没有通过表单处理,因此被放入数据槽中。我可以编写代码将其从 raw_data 中提取出来,但我肯定遗漏了什么或者这是一个错误!?

最佳答案

我发现在 Chrome 浏览器 raw_data['2011-01-01'] 所以它与时间不匹配格式!

你应该这样改:

format='%Y-%m-%d',

关于html - Wtforms.fields.html5 DateField 在 Flask 中不能像普通的旧 DateField 一样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39459557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com