﻿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
23681	NullBooleanSelect should have choices kwarg	benjaoming	benjaoming	"`NullBooleanSelect` is responsible of making the values 1, 2, and 3 turn into None, True or False. That's very nice of it, however it does not allow to customize the texts of the choices.

I'm not sure if exposing the internal 1, 2, 3 representation is a good idea, but it would seem okay since it follows the convention of other Select widgets. Ideally, I would like to see this...


{{{
class NullBooleanSelect(Select):
    """"""
    A Select Widget intended to be used with NullBooleanField.
    """"""
    def __init__(self, attrs=None):
        choices = (('1', ugettext_lazy('Unknown')),
                   ('2', ugettext_lazy('Yes')),
                   ('3', ugettext_lazy('No')))
        super(NullBooleanSelect, self).__init__(attrs, choices)
}}}


...changed to:


{{{
class NullBooleanSelect(Select):
    """"""
    A Select Widget intended to be used with NullBooleanField.
    """"""
    def __init__(self, choices=None, attrs=None):
        if not choices:
            choices = (('1', empty_label or ugettext_lazy('Unknown')),
                       ('2', ugettext_lazy('Yes')),
                       ('3', ugettext_lazy('No')))
        super(NullBooleanSelect, self).__init__(attrs, choices)
}}}


The motivation is that I often leave out labels to have them put as the default first option of the Select. An example use:

{{{
class MyForm(forms.Form):
    gender = forms.NullBooleanField(
        label="""",
        required=False,
        widget=NullBooleanSelect(choices=[(""1"", ""Male and female""),
                                          (""2"", ""Only female""),
                                          (""3"", ""Only Male"")])
        help_text=""Choose gender"",
    )

}}}

Even more preferable, would be to place the `choices` kwarg in `NullBooleanField`, as that would match the options for ChoiceField.

<b>Updated</b> In the original issue report, I put `empty_label` but realized that when selecting ""Yes"", it was impossible for the user to see what ""Yes"" was the answer to."	New feature	assigned	Forms	dev	Normal				Unreviewed	0	0	0	0	1	0
