Last active
June 8, 2023 18:09
-
-
Save doobeh/4668212 to your computer and use it in GitHub Desktop.
Checkbox WTForms Example (in Flask)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<title>Title</title> | |
</head> | |
<body> | |
<form method="post"> | |
{{ form.hidden_tag() }} | |
{{ form.example }} | |
<button type="submit">Submit</button> | |
</form> | |
</body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from flask import Flask, render_template | |
from flask_wtf import FlaskForm | |
from wtforms import widgets, SelectMultipleField | |
SECRET_KEY = 'development' | |
app = Flask(__name__) | |
app.config.from_object(__name__) | |
class MultiCheckboxField(SelectMultipleField): | |
widget = widgets.ListWidget(prefix_label=False) | |
option_widget = widgets.CheckboxInput() | |
class SimpleForm(FlaskForm): | |
string_of_files = ['one\r\ntwo\r\nthree\r\n'] | |
list_of_files = string_of_files[0].split() | |
# create a list of value/description tuples | |
files = [(x, x) for x in list_of_files] | |
example = MultiCheckboxField('Label', choices=files) | |
@app.route('/',methods=['post','get']) | |
def hello_world(): | |
form = SimpleForm() | |
if form.validate_on_submit(): | |
print(form.example.data) | |
return render_template("success.html", data=form.example.data) | |
else: | |
print("Validation Failed") | |
print(form.errors) | |
return render_template('example.html',form=form) | |
if __name__ == '__main__': | |
app.run(debug=True) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<title>Title</title> | |
</head> | |
<body> | |
<h1>Success</h1> | |
{{ data }} | |
</body> | |
</html> |
Hi! How I mark as checked a checkbox? Is for an edit form. Where I need to mark was already marked before on the create
Thanks for this code example.
I was struggling with validating the form though. I needed at least one checkbox to be checked. Above comments mentioning form.validate_on_submit()
or form.is_submitted()
unfortunately didn't help.
After some googling I stumbled on this stackoverflow answer that finally helped.
My final custom validator code:
def validate(self, extra_validators=None):
if super().validate(extra_validators):
if not request.form.getlist('example'):
self.example.errors.append('At least one checkbox must be selected')
return False
else:
return True
return False
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
How to query data from db instead of choices=files