Skip to content

Commit fd0c365

Browse files
committed
[1.1.X] Fixed #11860. Changed NullBooleanSelect's _has_changed method to repect differences between None and False. Backport of [12523] from trunk.
git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@12524 bcc190cf-cafb-0310-a4f2-bffc1f526a37
1 parent cda48e9 commit fd0c365

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

django/forms/widgets.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -454,9 +454,13 @@ def value_from_datadict(self, data, files, name):
454454
False: False}.get(value, None)
455455

456456
def _has_changed(self, initial, data):
457-
# Sometimes data or initial could be None or u'' which should be the
458-
# same thing as False.
459-
return bool(initial) != bool(data)
457+
# For a NullBooleanSelect, None (unknown) and False (No)
458+
# are not the same
459+
if initial is not None:
460+
initial = bool(initial)
461+
if data is not None:
462+
data = bool(data)
463+
return initial != data
460464

461465
class SelectMultiple(Select):
462466
def render(self, name, value, attrs=None, choices=()):

tests/regressiontests/forms/widgets.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -530,6 +530,20 @@
530530
<option value="2">Yes</option>
531531
<option value="3" selected="selected">No</option>
532532
</select>
533+
>>> w._has_changed(False, None)
534+
True
535+
>>> w._has_changed(None, False)
536+
True
537+
>>> w._has_changed(None, None)
538+
False
539+
>>> w._has_changed(False, False)
540+
False
541+
>>> w._has_changed(True, False)
542+
True
543+
>>> w._has_changed(True, None)
544+
True
545+
>>> w._has_changed(True, True)
546+
False
533547
534548
""" + \
535549
r""" # [This concatenation is to keep the string below the jython's 32K limit].

0 commit comments

Comments
 (0)