Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixed #11860. Changed NullBooleanSelect's _has_changed method to repe…

…ct differences between None and False. Thanks, matiasb.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@12523 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 871a99c948bcfe7e59bf93df4bcd00cffcbf94f2 1 parent f9c8615
Joseph Kocherhans jkocherhans authored
Showing with 21 additions and 3 deletions.
  1. +7 −3 django/forms/widgets.py
  2. +14 −0 tests/regressiontests/forms/widgets.py
10 django/forms/widgets.py
View
@@ -452,9 +452,13 @@ def value_from_datadict(self, data, files, name):
False: False}.get(value, None)
def _has_changed(self, initial, data):
- # Sometimes data or initial could be None or u'' which should be the
- # same thing as False.
- return bool(initial) != bool(data)
+ # For a NullBooleanSelect, None (unknown) and False (No)
+ # are not the same
+ if initial is not None:
+ initial = bool(initial)
+ if data is not None:
+ data = bool(data)
+ return initial != data
class SelectMultiple(Select):
def render(self, name, value, attrs=None, choices=()):
14 tests/regressiontests/forms/widgets.py
View
@@ -532,6 +532,20 @@
<option value="2">Yes</option>
<option value="3" selected="selected">No</option>
</select>
+>>> w._has_changed(False, None)
+True
+>>> w._has_changed(None, False)
+True
+>>> w._has_changed(None, None)
+False
+>>> w._has_changed(False, False)
+False
+>>> w._has_changed(True, False)
+True
+>>> w._has_changed(True, None)
+True
+>>> w._has_changed(True, True)
+False
""" + \
r""" # [This concatenation is to keep the string below the jython's 32K limit].
Please sign in to comment.
Something went wrong with that request. Please try again.