mirror of
https://github.com/django/django.git
synced 2025-07-04 01:39:20 +00:00
newforms-admin: Fixed #7132 -- Added a _has_changed method to SelectMultiple along with tests. SelectMultiple now correctly reports when it has changed or not.
git-svn-id: http://code.djangoproject.com/svn/django/branches/newforms-admin@7515 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
2bd053631a
commit
6b6778ac46
@ -401,6 +401,18 @@ class SelectMultiple(Widget):
|
||||
if isinstance(data, MultiValueDict):
|
||||
return data.getlist(name)
|
||||
return data.get(name, None)
|
||||
|
||||
def _has_changed(self, initial, data):
|
||||
if initial is None:
|
||||
initial = []
|
||||
if data is None:
|
||||
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
|
||||
|
||||
class RadioInput(StrAndUnicode):
|
||||
"""
|
||||
|
@ -612,6 +612,20 @@ If 'choices' is passed to both the constructor and render(), then they'll both b
|
||||
>>> w.render('nums', ['ŠĐĆŽćžšđ'], choices=[('ŠĐĆŽćžšđ', 'ŠĐabcĆŽćžšđ'), ('ćžšđ', 'abcćžšđ')])
|
||||
u'<select multiple="multiple" name="nums">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" selected="selected">\u0160\u0110abc\u0106\u017d\u0107\u017e\u0161\u0111</option>\n<option value="\u0107\u017e\u0161\u0111">abc\u0107\u017e\u0161\u0111</option>\n</select>'
|
||||
|
||||
# Test the usage of _has_changed
|
||||
>>> w._has_changed(None, None)
|
||||
False
|
||||
>>> w._has_changed([], None)
|
||||
False
|
||||
>>> w._has_changed(None, [u'1'])
|
||||
True
|
||||
>>> w._has_changed([1, 2], [u'1', u'2'])
|
||||
False
|
||||
>>> w._has_changed([1, 2], [u'1'])
|
||||
True
|
||||
>>> w._has_changed([1, 2], [u'1', u'3'])
|
||||
True
|
||||
|
||||
# RadioSelect Widget ##########################################################
|
||||
|
||||
>>> w = RadioSelect()
|
||||
@ -910,6 +924,20 @@ If 'choices' is passed to both the constructor and render(), then they'll both b
|
||||
<li><label><input type="checkbox" name="escape" value="good" /> you > me</label></li>
|
||||
</ul>
|
||||
|
||||
# Test the usage of _has_changed
|
||||
>>> w._has_changed(None, None)
|
||||
False
|
||||
>>> w._has_changed([], None)
|
||||
False
|
||||
>>> w._has_changed(None, [u'1'])
|
||||
True
|
||||
>>> w._has_changed([1, 2], [u'1', u'2'])
|
||||
False
|
||||
>>> w._has_changed([1, 2], [u'1'])
|
||||
True
|
||||
>>> w._has_changed([1, 2], [u'1', u'3'])
|
||||
True
|
||||
|
||||
# Unicode choices are correctly rendered as HTML
|
||||
>>> 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>'
|
||||
|
Loading…
x
Reference in New Issue
Block a user