﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
1081	SelectFields should have the option to render them with a default value	Yango	Adrian Holovaty	"I need to render SelectFields with a default value the first time they are rendered (that is, when the FormWrapper sends the render call with no value).

The following changes do exactly that...

I changed the SelectField's __init__ definition to look like this:

{{{
    def __init__(self, field_name, choices=[], size=1, is_required=False, validator_list=[], member_name=None, default_value=''):
        self.field_name = field_name
        self.default_value = str(default_value)
        # choices is a list of (value, human-readable key) tuples because order matters
        self.choices, self.size, self.is_required = choices, size, is_required
        self.validator_list = [self.isValidChoice] + validator_list
        if member_name != None:
            self.member_name = member_name
}}}

and the render method like this:

{{{
    def render(self, data):
        output = ['<select id=""%s"" class=""v%s%s"" name=""%s"" size=""%s"">' % \
            (self.get_id(), self.__class__.__name__,
             self.is_required and ' required' or '', self.field_name, self.size)]
        str_data = str(data) # normalize to string
        for value, display_name in self.choices:
            selected_html = ''
            if str(value) == str_data:
                selected_html = ' selected=""selected""'
            if str_data == '' and str(value) == self.default_value:
                selected_html = ' selected=""selected""'
            output.append('    <option value=""%s""%s>%s</option>' % (escape(value), selected_html, display_name))
        output.append('  </select>')
        return '\n'.join(output)
}}}


"	enhancement	closed	Core (Other)		normal	wontfix			Unreviewed	0	0	0	0	0	0
