Возьмем, к примеру, пользователя Schema
, где администратор сайта устанавливает количество запрашиваемых телефонных номеров:
class MySchema(Schema):
name = validators.String(not_empty=True)
phone_1 = validators.PhoneNumber(not_empty=True)
phone_2 = validators.PhoneNumber(not_empty=True)
phone_3 = validators.PhoneNumber(not_empty=True)
...
Каким-то образом я подумал, что могу просто сделать:
class MySchema(Schema):
name = validators.String(not_empty=True)
def __init__(self, *args, **kwargs):
requested_phone_numbers = Session.query(...).scalar()
for n in xrange(requested_phone_numbers):
key = 'phone_{0}'.format(n)
kwargs[key] = validators.PhoneNumber(not_empty=True)
Schema.__init__(self, *args, **kwargs)
с тех пор, как я прочитал в Документы FormEncode :
Валидаторы используют переменные экземпляра для хранения своей настройки
Информация. Вы можете использовать подклассы или обычное создание
установите их.
и Schema
в документах называются составными валидаторами и являются подклассом FancyValidator
, поэтому я догадался, что это правильно.
Но это не работает: просто добавленные phone_n
игнорируются и требуется только name
.
Обновление:
Также я попытался переопределить __new__
и __classinit__
, прежде чем безуспешно спрашивать ...