Нужно, чтобы SQLAlchemy WTForms Flask добавлял детей в родительский пример формы - PullRequest
0 голосов
/ 04 февраля 2020

Хотя есть документация для WTForms на https://wtforms.readthedocs.io/en/stable/ и есть также документация для WTForms-Alchemy на https://wtforms-alchemy.readthedocs.io/en/latest/, документация действительно может быть улучшена путем включения некоторых примеров, так как они будет реализовано с Flask. Одна проблема, с которой я сталкиваюсь, - это создание простой формы, которая позволяет пользователю обновлять родительский элемент и дочерние элементы родительского объекта. Два других сообщения StackOverflow решают эту проблему. Первый (который принадлежит мне и расположен по адресу . При использовании wtforms и sqlalchemy форма с отношениями родитель-потомок добавляет новые дочерние элементы в базу данных вместо обновления существующих дочерних элементов ) завершена, но содержит то, что я подозреваю это кладжа Второй вариант хорош, но не показывает, как сохранить форму в flask: Добавить запись в FieldList с Flask -WTForms, используя AJAX. Кто-нибудь знает полный и правильно работающий flask -sqlalchemy-wtforms пример формы, которая обновляет родительский объект и его потомков? Форма должна позволять пользователю добавлять дополнительные дочерние элементы и редактировать их, а не просто связывать родительский элемент с существующими дочерними элементами.

1 Ответ

0 голосов
/ 05 февраля 2020

Я наконец-то нашел решение, которое не кажется глупым. Полный репо (который все еще очень запасной) находится здесь: https://github.com/lfernandez55/3200_wtf_parent_child_example. Ниже представлено представление 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...