首页 > 解决方案 > 如何在烧瓶中为用户制作动态表单

问题描述

我为表中的每个用户都有编辑按钮,我只想为所有用户使用一个编辑表单。我的编辑按钮实现:

{{ button_show_dialog('open_edit_sprint_user', 'Edit','btn-primary') }}

{% call dialog_window('open_edit_sprint_user', 'Edit') %} {{ wtf.quick_form(edit_sprint_user_form, button_map={'add_user-submit': 'success'}) }} {% endcall %}

sprint_handler.py

def sprint_info(team_code, sprint_number):
    edit_sprint_user_form = forms.EditSprintUserForm(prefix='edit_sprint_user')
    if edit_sprint_user_form.validate_on_submit():
        ******do something******
    return render_template('baseop/sprint_info.html', sprint=sprint,
            edit_sprint_user_form=edit_sprint_user_form)

表格.py

class EditSprintUserForm(FlaskForm):
    value = FloatField('Mark', validators=[DataRequired()])
    description = TextAreaField('Description', validators=[DataRequired()])
    submit = SubmitField('Edit')

我有一个函数可以返回我 sprint 中的所有用户get_users_in_sprint()

所以我想按下这个按钮并只用一个名为 EditSprintUserForm 的表单编辑不同的用户,但现在我只能编辑一个选定的人

标签: pythondatabaseflaskjinja2

解决方案


我不确定我是否理解正确,我认为关键是在单击编辑按钮时获取当前编辑的用户的用户名或id。

简单的解决方案是使用 JavaScript,您需要为表单创建一个隐藏字段以获取用户名或 id:

from wtforms import HiddenField

class EditSprintUserForm(FlaskForm):
    user = HiddenField('User')  # <--
    value = FloatField('Mark', validators=[DataRequired()])
    description = TextAreaField('Description', validators=[DataRequired()])
    submit = SubmitField('Edit')

然后使用 JavaScript 创建一个事件侦听器,以便在单击编辑按钮时使用用户名或 id 填充此隐藏输入。您可以在编辑按钮中存储用户的用户名或 ID。

现在在视图函数中,您可以使用edit_sprint_user_form.user.data.


推荐阅读