Форум сайта python.su
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-адрес занят.')
Офлайн
Откройте любой валидатор и посмотрите как он пишется…
wtforms-alchemy не помешает посмотреть на досуге
Отредактировано 4kpt_III (Дек. 16, 2015 15:35:51)
Офлайн
4kpt_IIIЯ и валидаторы смотрел и код формы, отвечающий за валидацию смотрел, но так и не нашел ответа на вопрос, как сделать так, чтобы кастомный валидатор выполнялся только если пройдет проверку встроенный. Если вам несложно напишите код, решающий мою задачу. На всякий случай напомню:
Откройте любой валидатор и посмотрите как он пишется…wtforms-alchemy не помешает посмотреть на досуге
4kpt_IIIСмотрел как раз таки на досуге, только не нашел, чем они могут мне помочь.
wtforms-alchemy не помешает посмотреть на досуге
Офлайн
plusplus
валидаторы “validate_<some_name>” добавляются в конец списка валидаторов
Офлайн
sanderНикто не спорит.
plusplusвалидаторы “validate_<some_name>” добавляются в конец списка валидаторов
Отредактировано plusplus (Дек. 17, 2015 11:46:05)
Офлайн
plusplus
такое может произойти только если поле пустое, добавь validators.DataRequired() самым первым
Офлайн
plusplus
Смотрел как раз таки на досуге, только не нашел, чем они могут мне помочь.
Офлайн
sanderПричем тут DataRequired? Вот ошибка, для непустого поля, но с неправильным вводом, если убрать проверку field.validate(self) из кастомного валидатора
plusplusтакое может произойти только если поле пустое, добавь validators.DataRequired() самым первым
sqlalchemy.exc.DataError DataError: (DataError) invalid input syntax for type inet: "fsdsadf" LINE 3: WHERE hosts.addr = 'fsdsadf') AS anon_1 ^ 'SELECT EXISTS (SELECT * \nFROM hosts \nWHERE hosts.addr = %(addr_1)s) AS anon_1' {'addr_1': u'fsdsadf'}
Отредактировано plusplus (Дек. 17, 2015 12:40:46)
Офлайн
plusplus
у тебя 2 варианта:
1) переписать метод __call__ у IPAddress валидатора что бы он выбрасывал StopValidation вместо ValidationError
2) проверять наличие ошибок в field.errors
Офлайн
sander
2) проверять наличие ошибок в field.errors
Офлайн