Как проверить все поля wtform вместе, чтобы удовлетворить условию - PullRequest
1 голос
/ 07 ноября 2019

У меня есть форма с парой полей. Класс, который содержит форму, выглядит так:

class TestForm(Form):
      some_stuff_1 = IntegerField('Cool Bucket', description="Cool bucket",default=0,validators[validators.Optional(),validators.NumberRange(0, 100)])
      some_stuff_2 = IntegerField('Boring Bucket', description="Boring bucket",default=0,validators[validators.Optional(),validators.NumberRange(0, 100)])
      some_stuff_3 = IntegerField('Funny Bucket', description="Funny bucket",default=0,validators[validators.Optional(),validators.NumberRange(0, 100)])
      some_stuff_4 = IntegerField('Amazing Bucket', description="Amazing bucket",default=0,validators[validators.Optional(),validators.NumberRange(0, 100)])

Вышеприведенное работает отлично. Но теперь у меня есть дополнительное условие, где я хочу проверить, что пользователь не должен вводить все 0 для всех 4 полей. Так что, в основном, я ищу здесь обычную проверку, которая должна сообщить мне сообщение, если пользователь ввел 0 во всех четырех полях. Я ознакомился с пользовательской проверкой параметров wtb, но она применяется только к одному полю за раз, здесь я пытаюсь применить проверку к нескольким полям.

Может кто-нибудь подсказать мне, как это сделать.

1 Ответ

0 голосов
/ 12 ноября 2019

Хитрость заключается в том, чтобы подключиться к хуку проверки и написать собственный тест.

class TestForm(FlaskForm):
    val1 = IntegerField('Cool Bucket', description="Cool bucket",default=0,validators[validators.Optional(),validators.NumberRange(0, 100)])
    val2 = IntegerField('Cool Bucket', description="Cool bucket",default=0,validators[validators.Optional(),validators.NumberRange(0, 100)])

    def validate(self):
        rv = FlaskForm.validate(self)
        if not rv:
            return False

        test = (self.val1.data == 0) and (self.val2.data == 0)
        if test:
            self.val1.errors.append('Val1 and 2 cannot be 0')
            return False

        return True
...