How to use WTForms-Dynamic-fields Module (Flask/Python)

Viewed 404

I guess this question can be interpreted more generally with help on how to implement custom Python Modules.

I am building a Flask Web App and trying to create a reasonably complex form that basically allows a user to add more fields on button click but still retaining the benefits of WTForms.

I have come across this module online: https://pypi.org/project/WTForms-Dynamic-Fields/

I am confused as to how I am supposed to implement the module.

It says to create an instance of the module before using the add_field() and add_validator() methods. Before then binding the form variable to the 'process()' method. I guess I am meant to include a JavaScript button but getting very confused as to how to do this.

As a simple example I am trying to implement it on this simple WTForm:

class LoginForm(FlaskForm):
username = StringField('username', validators=[InputRequired()])
password = PasswordField('password', validators=[InputRequired()])
dynamic = WTFormsDynamicFields()

The HTML form:

<form method="POST" action="{{url_for('form')}}">
{{ form.csrf_token }}
{{ render_field(form.username) }}
{{ render_field(form.password) }}

<button onclick="dynamic.add_field('email', 'Email address', TextField)">Click Me!</button>

App.py:

@app.route('/form/', methods=['GET', 'POST'])
def form():
form = dynamic.process(LoginForm(), request.post)
if form.validate_on_submit():
    return '<h1>Thanks</h1>'
return render_template("form.html", form=form)

Would someone be able to give the one-page documentation a quick scan and tell me how exactly this can be implemented. It will help me moving forward with using other modules too (relative beginner).

Thanks in advance.

0 Answers
Related