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__
在没有成功之前询问...