diff options
| author | Jannis Leidel <jannis@leidel.info> | 2010-12-13 13:57:15 +0000 |
|---|---|---|
| committer | Jannis Leidel <jannis@leidel.info> | 2010-12-13 13:57:15 +0000 |
| commit | 49c2f23ec1b35ef2544653c1dfa93ce144160a4e (patch) | |
| tree | 8b664f7a6d4b2d7b5057c8e7948f0f4ea10b7a44 | |
| parent | 32bf35da09660604e8c65c1ac75f28b1918cf91c (diff) | |
[1.2.X] Fixed #14158 -- Fixed SelectMultiple._has_changed to not assume same order of data anymore. Thanks, akaariai and dmoisset.
Backport from trunk (r14887).
git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@14907 bcc190cf-cafb-0310-a4f2-bffc1f526a37
| -rw-r--r-- | django/forms/widgets.py | 7 | ||||
| -rw-r--r-- | tests/regressiontests/forms/tests/widgets.py | 1 |
2 files changed, 4 insertions, 4 deletions
diff --git a/django/forms/widgets.py b/django/forms/widgets.py index c2293ba837..0573a6ce1b 100644 --- a/django/forms/widgets.py +++ b/django/forms/widgets.py @@ -527,10 +527,9 @@ class SelectMultiple(Select): data = [] if len(initial) != len(data): return True - for value1, value2 in zip(initial, data): - if force_unicode(value1) != force_unicode(value2): - return True - return False + initial_set = set([force_unicode(value) for value in initial]) + data_set = set([force_unicode(value) for value in data]) + return data_set != initial_set class RadioInput(StrAndUnicode): """ diff --git a/tests/regressiontests/forms/tests/widgets.py b/tests/regressiontests/forms/tests/widgets.py index 9357e56c22..9e7c6f664a 100644 --- a/tests/regressiontests/forms/tests/widgets.py +++ b/tests/regressiontests/forms/tests/widgets.py @@ -830,6 +830,7 @@ beatle J R Ringo False""") self.assertFalse(w._has_changed([1, 2], [u'1', u'2'])) self.assertTrue(w._has_changed([1, 2], [u'1'])) self.assertTrue(w._has_changed([1, 2], [u'1', u'3'])) + self.assertFalse(w._has_changed([2, 1], [u'1', u'2'])) # Unicode choices are correctly rendered as HTML self.assertEqual(w.render('nums', ['ŠĐĆŽćžšđ'], choices=[('ŠĐĆŽćžšđ', 'ŠĐabcĆŽćžšđ'), ('ćžšđ', 'abcćžšđ')]), u'<ul>\n<li><label><input type="checkbox" name="nums" value="1" /> 1</label></li>\n<li><label><input type="checkbox" name="nums" value="2" /> 2</label></li>\n<li><label><input type="checkbox" name="nums" value="3" /> 3</label></li>\n<li><label><input checked="checked" type="checkbox" name="nums" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" /> \u0160\u0110abc\u0106\u017d\u0107\u017e\u0161\u0111</label></li>\n<li><label><input type="checkbox" name="nums" value="\u0107\u017e\u0161\u0111" /> abc\u0107\u017e\u0161\u0111</label></li>\n</ul>') |
