Я написал небольшую питона библиотеку required сделать проверку кросс-поля, как это проще. Вы можете кодировать логику проверки декларативно как попарные зависимости. Так что ваша форма может выглядеть следующим образом:
from required import R, Requires, RequirementError
class MyForm(Form):
VALIDATION = (
Requires("select1", R("select1") != R("select2") +
Requires("select2", R("select2") != R("select3") +
Requires("select3", R("select3") != R("select1")
)
select1 = SelectField('Select 1', ...)
select2 = SelectField('Select 2', ...)
select3 = SelectField('Select 3', ...)
def validate(self):
data = {
"select1": self.select1.data,
"select2": self.select2.data,
"select3": self.select3.data,
}
# you can catch the RequirementError
# and append the error message to
# the form errors
self.VALIDATION.validate(data)
return result
Вы можете взять объект ВАЛИДАЦИИ и добавить дополнительные правила проверки или даже поместить его в отдельный модуль и правила проверки импорта/повторного использования в разных местах.
Спасибо - почему строка 'if not Form.validate (self):'? Это держит стрельбу, когда я пробую ваше предложение, и проверка не выполняется. – YPCrumble
Это делается для проверки по умолчанию (как если бы вы не переопределили проверку) – FogleBird
Другие шаги - выполнить проверку по нескольким полям, как вы просили. – FogleBird