如何相互验证wtforms字段?

YPC*_*ble 17 python validation flask wtforms flask-wtforms

SelectField在表单中有三个相同的输入,每个输入都有相同的选项集.我不能使用一个多选.

我想确保用户为这三个字段选择三种不同的选择.

在自定义验证中,您似乎一次只能引用一个字段,而不是将此字段的值与其他字段进行比较.我怎样才能做到这一点?谢谢!

Fog*_*ird 26

你可以validate在你的Form...中覆盖

class MyForm(Form):
    select1 = SelectField('Select 1', ...)
    select2 = SelectField('Select 2', ...)
    select3 = SelectField('Select 3', ...)
    def validate(self):
        if not Form.validate(self):
            return False
        result = True
        seen = set()
        for field in [self.select1, self.select2, self.select3]:
            if field.data in seen:
                field.errors.append('Please select three distinct choices.')
                result = False
            else:
                seen.add(field.data)
        return result
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用的是Python 3,最好编写`super().validate()`而不是`Form.validate(self)`.如果您使用的是Python 2,请使用`super(MyForm,self).validate()`. (8认同)

小智 8

您可以在验证中使用该表单来获取其他字段的值。

例如:

def validate_name(form, field):
    if form.other_variable.data == 'checked' and len(field.data) > 10:
        raise validation_error("say somgthing")
Run Code Online (Sandbox Code Playgroud)