Require One Field or Another

Captured

None

Code (show in context)

    @view_config(renderer='templates/form.pt', name='require_one_or_another')
    @demonstrate('Require One Field or Another')
    def require_one_or_another(self):
        class Schema(colander.Schema):
            one = colander.SchemaNode(
                colander.String(),
                missing=unicode(''),
                title='One (required if Two is not supplied)')
            two = colander.SchemaNode(
                colander.String(),
                missing=unicode(''),
                title='Two (required if One is not supplied)')
        def validator(form, value):
            if not value['one'] and not value['two']:
                exc = colander.Invalid(
                    form, 'A value for either "one" or "two" is required')
                exc['one'] = 'Required if two is not supplied'
                exc['two'] = 'Required if one is not supplied'
                raise exc
        schema = Schema(validator=validator)
        form = deform.Form(schema, buttons=('submit',))
        return self.render_form(form)