from flask_wtf import Form from wtforms import StringField class EquipmentAddForm(Form): main_ip = TextField( label=u'IP-адрес', validators=[IPAddress(message=u'Неправильный ip-адрес')] ) def validate_main_ip(self, field): # Введен неправильный ip-адрес # Приходится вызывать field.validate второй раз if not field.validate(self): return # Проверяем `существует ли такой ip-адрес if db.session.query(exists()\ .where(Host.addr == field.data))\ .scalar(): raise ValidationError(u'Этот ip-адрес занят.')
Сначала проверяется, что введенное поле является ip-адресом, затем, если это так, проверяется в базе не занят ли данный ip-адрес. Данный код работает и делает, что нужно, но проблема в том, что field.validate здесь выполнится два раза. Если же я уберу field.validate из validate_main_ip, то будет попытка проверки в базе для неправильного ip-адреса. Как мне тут поступить? Неужели только переопределять метод validate у формы? Нет способа реализовать также как в Django?