FlaskWTForms SelectMultipleField限制最大选择数

2024-06-28 23:41:58 发布

您现在位置:Python中文网/ 问答频道 /正文

现在我正在用Flask构建一个webapp,包括一些WTForms。其中之一是一个检查表,人们可以从多个选项中进行选择(因此有一个SelectMultipleField)。现在我想确保人们只能选择最大数量的选项(比如3个选项中的2个),如果他们想选择更多的选项,必须先取消选择其他选项中的一个。我想这可能与验证有关,但我真的不知道该怎么做…任何帮助都非常感谢! 这是我的代码表单.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模板中的代码

^{pr2}$

我想这也可能与包含一些javascript有关?但如果有什么办法可以避免的话,我会很高兴的:)


Tags: of代码flask数量选项fileswidgetswidget
1条回答
网友
1楼 · 发布于 2024-06-28 23:41:58

当然,您可以在客户端用一些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模板中:

^{pr2}$

相关问题 更多 >