Select Widget (with deferred choices and default)

Captured

None

Code (show in context)

    @view_config(renderer='templates/form.pt', name='select_with_deferred')
    @demonstrate('Select Widget (with deferred choices and default)')
    def select_with_deferred(self):
        @colander.deferred
        def deferred_choices_widget(node, kw):
            choices = kw.get('choices')
            return deform.widget.SelectWidget(values=choices)
        @colander.deferred
        def deferred_default(node, kw):
            return kw['default']
        
        class Schema(colander.Schema):
            pepper = colander.SchemaNode(
                colander.String(),
                default=deferred_default,
                widget=deferred_choices_widget,
                )
        choices = (
            ('', '- Select -'),
            ('habanero', 'Habanero'),
            ('jalapeno', 'Jalapeno'),
            ('chipotle', 'Chipotle')
            )
        schema = Schema().bind(choices=choices, default='jalapeno')
        form = deform.Form(schema, buttons=('submit',))
        return self.render_form(form)