From f793f27df0695d5ff82f947694546b6e5ae6263a Mon Sep 17 00:00:00 2001 From: Brian Rosner Date: Mon, 5 May 2008 18:08:07 +0000 Subject: [PATCH] newforms-admin: Fixed #7160 -- MultiWidget._has_changed was short-circuiting while testing for changed data in its widgets. Added tests to ensure this won't get broken in the future. git-svn-id: http://code.djangoproject.com/svn/django/branches/newforms-admin@7517 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/newforms/widgets.py | 6 +++--- tests/regressiontests/forms/widgets.py | 13 +++++++++++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/django/newforms/widgets.py b/django/newforms/widgets.py index 02cecca9aa..38d7aed97e 100644 --- a/django/newforms/widgets.py +++ b/django/newforms/widgets.py @@ -591,9 +591,9 @@ class MultiWidget(Widget): else: initial = self.decompress(initial) for widget, initial, data in zip(self.widgets, initial, data): - if not widget._has_changed(initial, data): - return False - return True + if widget._has_changed(initial, data): + return True + return False def format_output(self, rendered_widgets): """ diff --git a/tests/regressiontests/forms/widgets.py b/tests/regressiontests/forms/widgets.py index e20ea15175..3ebf0b5a2f 100644 --- a/tests/regressiontests/forms/widgets.py +++ b/tests/regressiontests/forms/widgets.py @@ -963,10 +963,19 @@ u'
< u'
' >>> w = MyMultiWidget(widgets=(TextInput(), TextInput())) ->>> w._has_changed(None, ['john', 'lennon']) +# test with no initial data +>>> w._has_changed(None, [u'john', u'lennon']) True ->>> w._has_changed('john__lennon', ['john', 'lennon']) +# test when the data is the same as initial +>>> w._has_changed(u'john__lennon', [u'john', u'lennon']) False +# test when the first widget's data has changed +>>> w._has_changed(u'john__lennon', [u'alfred', u'lennon']) +True +# test when the last widget's data has changed. this ensures that it is not +# short circuiting while testing the widgets. +>>> w._has_changed(u'john__lennon', [u'john', u'denver']) +True # SplitDateTimeWidget #########################################################