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 docsを読んだので:
バリデータは、インスタンス変数を使用してカスタマイズ情報を保存します。これらを設定するには、サブクラス化または通常のインスタンス化を使用できます。
ドキュメントでSchema
は複合バリデーターとして呼び出され、のサブクラスであるFancyValidator
ため、正しいと思いました。
しかし、これは機能しません。単純に追加されたphone_n
ものは無視され、name
必要なだけです。
アップデート:
また、私は両方を上書きしようとし__new__
まし__classinit__
たが、尋ねる前に成功しませんでした...