А зачем для каждого? Только для того, на котором проверка должна обрубаться. Если там не IP зачем проверять дальше? Например, в Required ставится отсечка. А вот проверять, что накидали предыдущие валидаторы в новом валидаторе вообще не есть гуд. Потому как это противоречит логике построения “валидационной цепочки”, т.е. вы делаете код, который другие могут и не понять. Ну а насчет громоздкости это будет не менее громоздким, чем написать несколько строк, которые вызовут super метод для нового валидатора и если он выдаст ValidationError выдадут StopValidation.
Это будет громоздко???
class OnlyIPAddress(IPAddress):
def __call__(self, **kwargs):
try:
super(OnlyIPAddress, self).__call__(**kwargs)
except ValidationError:
raise StopValidation
P.S. А городить проверку уникальности на 7 строк, которая и так есть в wtforms-alchemy да еще внутри создания формы не громоздко??? Не ломайте естественную логику работы валидаторов, мой Вам совет.