现在我正在使用Flask构建一个webapp,包括一些WTForms。其中一个是一个清单,人们可以从中选择多个选项(因此是一个SelectMultipleField)。现在我想确保人们只能选择最多数量的选项(例如3个中的2个),如果他们想要选择更多选项,则必须取消选择其中一个选项。我认为可能需要对验证做些什么,但我真的不确定如何做到这一点...非常感谢任何帮助! 这是我在forms.py
中的代码class MultiCheckboxField(SelectMultipleField):
option_widget = widgets.CheckboxInput()
widget = widgets.ListWidget(prefix_label = False)
class ChecklisteForm(FlaskForm):
list_of_files = ['politiek', 'economie', 'sport']
files = [(x, x) for x in list_of_files]
example = MultiCheckboxField('Label', choices=files)
submit = SubmitField('Wijzigen')
这是我的html模板中的代码
<form action="" method = "post">
{{ form.hidden_tag() }}
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<div class="col-lg-4">
<div class="button-group">
<span class="kiezen_informatie">
<button type="button" class="btn btn-info btn-large dropdown-toggle" data-toggle="dropdown">Kies kategorie </span> <span class="caret"></span></button>
<ul class="dropdown-menu text-center">
<li><a href = "#">{{form.example(class = "list-unstyled")}}</a></li>
<li><a href = "#"> {{form.submit(class = "btn btn-info")}}</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
我认为这也可能与包含一些javascript有关?但如果有任何办法我可以避免,我会很高兴:)
答案 0 :(得分:2)
您当然可以在客户端使用一些Javascript验证这一点,但您还需要在服务器端对此进行验证,以确保用户不会避免Javascript验证并提交他们不应该提交的数据。
您可以在表单中定义自定义validate
方法:
class ChecklisteForm(FlaskForm):
list_of_files = ['politiek', 'economie', 'sport']
files = [(x, x) for x in list_of_files]
example = MultiCheckboxField('Label', choices=files)
submit = SubmitField('Wijzigen')
def validate(self):
rv = FlaskForm.validate(self)
if not rv:
return False
print(self.example.data)
if len(self.example.data) > 2:
self.example.errors.append('Please select no more than 2 items')
return False
return True
并在您的HTML模板中:
{% for key in form.errors %}
{% for error in form.errors[key] %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
{% endfor %}