formencode

formencode.api – Core classes for validation — FormEncode 2.0.0a1 documentation

. if_key_missing
Schemaで宣言しているキーが入力側のdictに含まれていない場合に
このメンバで宣言している値をデフォルトとして渡す。
その後その値でValidateされる。
なお、バリデータが既にif_missingメンバを持っている場合には
上書きはせずそちらを使う。

Google サイト

FancyValidator

Using Custom Validators

FormEncode comes with a useful set of validators, but you can also easily create your own. One common reason for wanting to do this is if you are populating a select field with values from a database and you want to ensure the value submitted is one of the values in the database.
http://pylonsbook.com/en/1.1/working-with-forms-and-validators.html

validateにデータベースの値を使う

python - formencode nesting custom validators within schema - Stack Overflow

Schema add fields dynamically

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)
self.add_field(key, validators.PhoneNumber(not_empty=True))

python - formencode Schema add fields dynamically - Stack Overflow