Deform/Colander validator that has access to all nodes?

后端 未结 2 783
孤独总比滥情好
孤独总比滥情好 2021-02-15 16:44

How do you define a custom validator in Deform/Colander that has access to all node values. I need to access the values from two fields in order to decide if a particular value

相关标签:
2条回答
  • 2021-02-15 17:19

    To place a validator for all colander fields we can simply do this

    validator method:

    def user_DoesExist(node,appstruct):
    if DBSession.query(User).filter_by(username=appstruct['username']).count() > 0:
        raise colander.Invalid(node, 'Username already exist.!!')
    

    Schema:

    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:

    @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'))
    

    Correct me if i am wrong in my scenario.

    Thanks

    0 讨论(0)
  • 2021-02-15 17:25

    Tangibly the answer is:

    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())
    

    Note the form validator is invoked only if none of the individual field validators raise an error.

    0 讨论(0)
提交回复
热议问题