Flask 需要SQLAlchemy将子项附加到父表单示例中吗

Flask 需要SQLAlchemy将子项附加到父表单示例中吗,flask,sqlalchemy,wtforms,Flask,Sqlalchemy,Wtforms,虽然有关于WTForms的文档,也有关于WTForms Alchemy的文档,但是文档中确实可以通过包括一些示例来改进,因为它们将通过Flask实现。我面临的一个挑战是创建一个简单的表单,允许用户更新父对象的父对象和子对象。另外两个StackOverflow帖子解决了这一挑战。第一个(这是我自己的,位于)是完整的,但包含我怀疑是一个乱七八糟。第二个很好,但没有显示如何将表单保存在flask:。是否有人知道一个完整且正确的用于更新父对象及其子对象的表单示例?表单应该允许用户添加其他子项并对其进行编

虽然有关于WTForms的文档,也有关于WTForms Alchemy的文档,但是文档中确实可以通过包括一些示例来改进,因为它们将通过Flask实现。我面临的一个挑战是创建一个简单的表单,允许用户更新父对象的父对象和子对象。另外两个StackOverflow帖子解决了这一挑战。第一个(这是我自己的,位于)是完整的,但包含我怀疑是一个乱七八糟。第二个很好,但没有显示如何将表单保存在flask:。是否有人知道一个完整且正确的用于更新父对象及其子对象的表单示例?表单应该允许用户添加其他子项并对其进行编辑,而不是简单地将父项与现有子项相关联。

我终于想出了一个解决方案,这个解决方案并不让人感到笨拙。完整回购协议(仍然非常空闲)如下所示:。下面是update_registration视图,详细说明了表单信息如何在更新中持久化:

@app.route('/update_registration', methods=['GET', 'POST'])
def update_registration():
    parentObj = Parent.query.filter(Parent.id == 1).first()
    form = ParentForm(id=parentObj.id, name=parentObj.name, children=parentObj.children)

    if form.add_child.data:
        form.children.append_entry()
        return render_template('update_registration.html', form=form)
    if form.remove_child.data:
        popped_entry = form.children.pop_entry()
        child = Child.query.filter(Child.id == popped_entry.data['id']).first()
        db.session.delete(child)
        db.session.commit()
        return render_template('update_registration.html', form=form)
    if form.validate_on_submit():
        for child in form.children.data:
            if child['id'] != "":
                childObj = Child.query.filter(Child.id == child['id']).first()
                childObj.name=child['name']
                childObj.age=child['age']
            else:
                childObj = Child(name=child['name'],age=child['age'])
            parentObj.children.append(childObj)
        db.session.add(parentObj)
        db.session.commit()
        flash('Parent [and children] Updated!!')
        return redirect(url_for('home_page'))
    return render_template('update_registration.html', form=form)

这是窗体应如何运行的屏幕广播: