Deform/Colander で、すべてのノード値にアクセスできるカスタム バリデータをどのように定義しますか。特定の値が有効かどうかを判断するために、2 つのフィールドの値にアクセスする必要がありますか?
2332 次
2 に答える
3
すべての水切りフィールドにバリデーターを配置するには、これを行うだけです
バリデータメソッド:
def user_DoesExist(node,appstruct):
if DBSession.query(User).filter_by(username=appstruct['username']).count() > 0:
raise colander.Invalid(node, 'Username already exist.!!')
スキーマ:
class UserSchema(CSRFSchema):
username = colander.SchemaNode(colander.String(), description="Extension of the user")
name = colander.SchemaNode(colander.String(), description='Full name')
extension = colander.SchemaNode(colander.String(),description='Extension')
pin = colander.SchemaNode(colander.String(), description='PIN')
意見:
@view_config(route_name='add_user', permission='admin', renderer='add_user.mako')
def add_user(self):
#Here you can provide validator method as a parameter. And you can validate any field you want.
schema = UserSchema(validator = user_DoesExist).bind(request=self.request)
form = deform.Form(schema, action=self.request.route_url('add_user'), buttons=('Add User','Cancel'))
私のシナリオが間違っている場合は修正してください。
ありがとう
于 2013-08-27T06:44:22.593 に答える
2
具体的な答えは次のとおりです。
def verify_email_validator(form, values):
if values['email_address'] != values['verify_email']:
raise Invalid(form, 'Email values do not match')
class MySchema(MappingSchema):
def __init__(self, *args, **kwargs):
super(KickEntrySchema, self).__init__(*args, **kwargs)
self.validator=verify_email_validator # entire form validator
email_address = SchemaNode(Email())
verify_email = SchemaNode(Email())
フォーム バリデータは、個々のフィールド バリデータでエラーが発生しない場合にのみ呼び出されることに注意してください。
于 2013-08-23T08:00:02.693 に答える