Python 两个不同视图中使用的WTForm仅使用一个视图进行验证

Python 两个不同视图中使用的WTForm仅使用一个视图进行验证,python,flask,flask-wtforms,wtforms,Python,Flask,Flask Wtforms,Wtforms,我在两个不同的视图中使用WTForm时遇到问题。一个视图使用表单数据创建一个新项。另一个视图显示数据库中已有项目的信息,用户应该能够从中更新表单数据 我可以在数据库中创建和查看项目。问题是在显示视图中更新信息。我采取的步骤如下: 在/Create中创建项目。在保存到数据库之前,请检查数据库中是否没有相同的ID。如果存在,则显示闪光灯,不允许保存项目。重新加载/create 要显示有关现有项目的信息,请调用数据库,填充表单并使用相同的表单显示信息 期望行为 在/display/中更新信息。更新

我在两个不同的视图中使用WTForm时遇到问题。一个视图使用表单数据创建一个新项。另一个视图显示数据库中已有项目的信息,用户应该能够从中更新表单数据

我可以在数据库中创建和查看项目。问题是在显示视图中更新信息。我采取的步骤如下:

  • /Create
    中创建项目。在保存到数据库之前,请检查数据库中是否没有相同的ID。如果存在,则显示闪光灯,不允许保存项目。重新加载
    /create

  • 要显示有关现有项目的信息,请调用数据库,填充表单并使用相同的表单显示信息

  • 期望行为 在
    /display/
    中更新信息。更新任何字段数据并按下提交按钮后,表单应保存到数据库并重新加载
    /display/

    实际行为 按下提交按钮后,表单将我带回
    /create
    路径,并执行ID验证

    我不明白为什么在不同的视图中,表单的提交按钮将我带到
    /create
    视图


    代码是这样的:

    这是一个简单的形式

        class ItemForm(FlaskForm):
            id = IntegerField("id", validators=[DataRequired()])
            name = StringField("Email", validators=[DataRequired()])
            submit = SubmitField("Submit")
    
    通过此操作,我在数据库中创建了一个新项,检查数据库中是否没有相同的Id:

        @app.route("/create", methods=["GET", "POST"])
        def create():
            form = ItemForm()
    
            if form.validate_on_submit():
                item = item = Item.query.filter(Item.id == form.id).first()
                # Check the same id is not already created
                if item is not None:
                    flash('item already in database')
                    return redirect(url_for("create"))
    
                item = Item()
                form.populate_obj(item)
                db.session.add(item)
                db.session.commit()
                return redirect(url_for("display", item = form.id))
            else:
                return render_template("create.html", form=form)
    
    然后在数据库中创建项目后,我可以调用显示路由。在这个路径中,我应该能够更新表单中的字段并将其保存到数据库中。不进行验证,因为数据库中已经存在相同的ID(我正在更新,不创建新ID)

    @app.route(“/display/”,方法=[“GET”,“POST”])
    def显示(项目):
    item=item.query.filter(item.id==item.first()
    表格=项目表格(obj=项目)
    if form.validate_on_submit():
    表格.填充对象(项目)
    db.session.add(项)
    db.session.commit()
    返回重定向(url_用于(“显示”,item=form.id))
    其他:
    返回渲染模板(“display.html”,form=form)
    
    问题是,在
    /display/
    路线中,提交按钮会将我带回
    /create
    路线。在那里执行验证。当然,该项已经在数据库中创建,因此我得到了flash,并被重定向到
    /create
    ,此时它应该重新加载
    /display/


    请有人给我指一下正确的方向好吗。谢谢大家!

    我错了,但“乌加尼亚涅夫拉”提出了正确的问题。单独编码的问题

    我在HTML中添加了一个操作,但忘记删除它

    我有

    
    
    更正后,我有:

    
    
    请添加您的html表单,可能问题出在表单的操作上您只需提出正确的问题。检查python和js,并假设html是正常的。当我构建
    /create
    时,我在表单中添加了一个操作,但忘了删除它。
    @app.route("/display/<item>", methods=["GET", "POST"])
    def display(item):
        item = Item.query.filter(Item.id == item).first()
        form = ItemForm(obj=item)
    
        if form.validate_on_submit():
            form.populate_obj(item)
            db.session.add(item)
            db.session.commit()
            return redirect(url_for("display", item=form.id))
        else:
            return render_template("display.html", form=form)