Flask WTForms表单未提交,但未输出验证错误

2024-05-17 00:04:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Flask创建一个基本的会计包,但我有点坚持验证一个特定的表单。它在同一个应用程序中为另一个表单工作,但由于某些原因,我不明白为什么这个表单不能正常工作。表单在web浏览器中正常显示,我可以正常输入数据,但当我提交表单时,它似乎只是重新加载页面。我的数据库没有更新,经过一番挖掘,我发现我的if form.validate_on_submit()没有捕获到任何内容。在

堆栈跟踪中也没有抛出错误。在

我将把我档案的相关部分张贴在下面。在

我的views.py

@app.route('/dashboard/<nickname>/work-orders/add/', methods = ['GET', 'POST'])
@login_required
def work_orders_add(nickname):
ca = check_active(nickname)
if ca[1] == True:
    form = AddWorkOrderForm()
    u = User.query.get(current_user.id)
    c = u.contacts.order_by('name').all()
    form.requestor.choices = [(contact, contact.name) for contact in c]
    if form.validate_on_submit():
        db.session.add(WorkOrder(requestor = form.requestor.data,
            date = form.date.data,
            notes = form.notes.data,
            total = 0.00,
            completed = form.completed.data,
            user = g.user))
        db.session.commit()
        return redirect(url_for('work_orders', nickname=current_user.nickname))
    elif request.method != "POST":
        form.date.data = datetime.date.today()
    else: return "didn't work" 
    return render_template('work_orders_add.html',
        user = ca[0],
        title = "New Work Order",
        form = form)
else: return redirect(url_for('work_orders', nickname=current_user.nickname))

我的forms.py

^{pr2}$

我的models.py

class WorkOrder(db.Model):
    __tablename__ = 'workorder'
    id = db.Column(db.Integer, primary_key = True)
    date = db.Column(db.String(64))
    notes = db.Column(db.String(1024))
    total = db.Column(db.Float)
    completed = db.Column(db.Boolean)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    contact_id = db.Column(db.Integer, db.ForeignKey('contact.id'))
    items = db.relationship('WorkOrderItem', primaryjoin="WorkOrder.id==WorkOrderItem.work_order_id", backref = 'order')

    def __repr__(self):
        return '<WorkOrder %r>' % (self.id)

我的HTML文件:

{% extends "_is_logged.html" %}
{% block content %}
<h1>{{ title }}</h1>
<form action="" method="post" name="work_order">
    {{ form.hidden_tag() }}
    <p>Requestor: {{ form.requestor() }}</p>
    <p>Date: {{ form.date() }}</p>
    <p>Notes: {{ form.notes(size=70) }}</p>
    <p>Completed: {{ form.completed() }}</p>
    <p><input type="submit" value="Add Work Order"></p>
</form>
{% endblock %}

谢谢。在


Tags: formaddid表单dbdatadatereturn
1条回答
网友
1楼 · 发布于 2024-05-17 00:04:53

我想@Iarissa早就发现了。表单没有action值,因此作为第一步,我建议您更改此设置:

<form action="" method="post" name="work_order">

进入:

^{pr2}$

同样从给定的代码来看,函数work_orders_add(nickname)似乎没有正确缩进。if语句应该包含在函数中,这样您就可以:

@app.route('/dashboard/<nickname>/work-orders/add/', methods = ['GET', 'POST'])
@login_required
def work_orders_add(nickname):
    ca = check_active(nickname)
    if ca[1] == True:
        form = AddWorkOrderForm()
        u = User.query.get(current_user.id)
        c = u.contacts.order_by('name').all()
        form.requestor.choices = [(contact, contact.name) for contact in c]
        if form.validate_on_submit():

相关问题 更多 >