Подтвердить что ты не робот

Флажок одновременно проверяет несколько полей декоратора

Я использовал декоратор @validates в sqlalchemy.orm из фляги для проверки полей, и все прошло хорошо, пока все поля не зависят друг от друга, например:

@validates('field_one')
def validates_field_one(self, key, value):
   #field one validation

@validates('field_two')
def validates_field_two(self, key, value):
   #field two validation

Однако теперь мне нужно сделать некоторую проверку, которая потребует одновременного доступа к field_one и field_two. Похоже, что валидаты принимают несколько аргументов для проверки декоратора, однако он просто запускает функцию проверки один раз для каждого аргумента, как таковой:

@validates('field_one', 'field_two')
def validates_fields(self, keys, values):
   #field validation

Результаты в потоке работы для проверки поля field_one, а затем подтвердите значение field_two. Тем не менее, я хотел бы подтвердить оба одновременно (тривиальный пример того, что было бы утверждать, что значение field_one не является значением field_two, примером которого было бы запрещение self-loops в графе, где field_one и field_two обратитесь к узлам и выполняйте проверку на ребре). Как будет лучший способ сделать это?

4b9b3361

Ответ 1

Закажите поля в том порядке, в котором они были определены в модели. Затем проверьте, проверено ли последнее поле. В противном случае просто верните значение unchecked. Если валидатор проверяет одно из ранних полей, некоторые из них еще не будут установлены.

@validates('field_one', 'field_two')
def validates_fields(self, key, value):
    if key == 'field_two':
        assert self.field_one != value
    return value

См. этот пример.