2013-02-22 19 views

Trả lời

2

tangibly câu trả lời là:

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 validator hình thức được gọi chỉ khi không có xác nhận lĩnh vực cá nhân nâng cao một lỗi.

+0

Giải pháp này không hoạt động khi bạn kết MySchema mẫu trong một cái nhìn tức deform.Form (MySchema(). Bind(), các nút = ('Gửi', 'Hủy'),. ...). Giải pháp của Tim Hoffman hoạt động và đáng giá khi nhấp vào vì nó đề xuất chỉ cần truyền tham số từ khóa thay vì ghi đè phương thức. –

3

Để đặt một validator cho tất cả các lĩnh vực colander chúng tôi chỉ có thể làm phương pháp này

validator:

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

Xem:

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

Đúng nếu tôi sai trong trường hợp của tôi.

Cảm ơn

Các vấn đề liên quan