如何在Flask中为用户创建动态表单

时间:2019-07-04 12:14:32

标签: python database flask jinja2

我对表中的每个用户都有一个编辑按钮,并且我只希望对所有用户使用一种编辑形式。 我的编辑按钮实现:

{{ 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)

forms.py

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

我有一个函数可以返回我的sprint get_users_in_sprint()

中的所有用户

所以我想按此按钮并仅使用一种名为EditSprintUserForm的表单来编辑不同的用户,但是现在我只能编辑一个选定的人

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解正确,我想关键是单击编辑按钮时,获取当前已编辑用户的用户名或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获取用户名或ID。