﻿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
31971	Would like a BooleanChoiceField in Forms	Terence Collins	nobody	"I am using a ChoiceField with a RadioSelect to provide an input to a boolean field, however, the value in forms.cleaned_data comes through as a string.  I understand why a choice field would result in a string, however if I place booleans in my values I'd expect them to pass simple equality tests against booleans in the model.   Other users implementing this model will likely come up against a bug where False ≠ 'False'.   So I'd request a widget (BooleanChoiceField) to cover this case: often a simple checkbox will not provide sufficient interface guidance to a user on the implications of their true/false options.

{{{#!python
#in forms.py
class TimingForm(forms.ModelForm):

    TIMING_LEVEL_CHOICES = ( (False, ""Time Whole Lines (recommended)""),
                              (True, ""Time Individual Words""), )

    word_level_timing = forms.ChoiceField(label='Timing Level', required=True, widget=forms.RadioSelect, choices=TIMING_LEVEL_CHOICES, initial=False)
    class Meta:
        model = TimingThingie
        fields = ['word_level_timing']

#in models.py
class TimingThingie(models.Model):
    word_level_timing = models.BooleanField(default=False)

#in views.py:
def modify_timing(request, tinstance_id):
    tinstance = TimingThingie.objects.get(id=tinstance_id)
    if tinstance.word_level_timing != form.cleaned_data[""word_level_timing""]:
        #one is False, the other is 'False', inequality is true against intent and likely introduces a bug  
        pass 
    if tinstance.word_level_timing != bool(strtobool(form.cleaned_data[""word_level_timing""])):
        #this works correctly, but is ugly and born only through suffering
        pass
  }}}"	New feature	new	Forms	3.1	Normal		boolean widget radioselect radio BooleanField ChoiceField forms		Unreviewed	0	0	0	0	0	0
