Commit b99cc935 authored by Jacob Kaplan-Moss's avatar Jacob Kaplan-Moss
Browse files

Fixed #7753: clean `NullBooleanField` correctly when using `HiddenInput`....

Fixed #7753: clean `NullBooleanField` correctly when using `HiddenInput`. Thanks to julien and ElliottM.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@8661 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 938f7ea9
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -594,7 +594,18 @@ class NullBooleanField(BooleanField):
    widget = NullBooleanSelect

    def clean(self, value):
        return {True: True, False: False}.get(value, None)
        """
        Explicitly checks for the string 'True' and 'False', which is what a
        hidden field will submit for True and False. Unlike the
        Booleanfield we also need to check for True, because we are not using
        the bool() function
        """
        if value in (True, 'True'):
            return True
        elif value in (False, 'False'):
            return False
        else:
            return None

class ChoiceField(Field):
    widget = Select
+14 −0
Original line number Diff line number Diff line
@@ -1091,6 +1091,20 @@ False
>>> f.clean('3')
>>> f.clean('hello')

# Make sure that the internal value is preserved if using HiddenInput (#7753)
>>> class HiddenNullBooleanForm(Form):
...     hidden_nullbool1 = NullBooleanField(widget=HiddenInput, initial=True)
...     hidden_nullbool2 = NullBooleanField(widget=HiddenInput, initial=False)
>>> f = HiddenNullBooleanForm()
>>> print f
<input type="hidden" name="hidden_nullbool1" value="True" id="id_hidden_nullbool1" /><input type="hidden" name="hidden_nullbool2" value="False" id="id_hidden_nullbool2" />
>>> f = HiddenNullBooleanForm({ 'hidden_nullbool1': 'True', 'hidden_nullbool2': 'False' })
>>> f.full_clean()
>>> f.cleaned_data['hidden_nullbool1']
True
>>> f.cleaned_data['hidden_nullbool2']
False

# MultipleChoiceField #########################################################

>>> f = MultipleChoiceField(choices=[('1', 'One'), ('2', 'Two')])