From 816bf0c6a7a13efb7ae17c9773f984f2dd16fc72 Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Sun, 21 Jul 2013 22:26:03 +0200 Subject: [PATCH] [1.6.x] Fixed #20781 -- Fixed _has_changed regression with MultiValueField Thanks Tim Graham for the report. Backport of 02b0106d from master. --- django/forms/fields.py | 2 +- tests/forms_tests/tests/test_extra.py | 2 +- tests/forms_tests/tests/test_fields.py | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/django/forms/fields.py b/django/forms/fields.py index 7711cd65ad..a794c02e9f 100644 --- a/django/forms/fields.py +++ b/django/forms/fields.py @@ -1025,7 +1025,7 @@ class MultiValueField(Field): if not isinstance(initial, list): initial = self.widget.decompress(initial) for field, initial, data in zip(self.fields, initial, data): - if field._has_changed(initial, data): + if field._has_changed(field.to_python(initial), data): return True return False diff --git a/tests/forms_tests/tests/test_extra.py b/tests/forms_tests/tests/test_extra.py index ea0f063c30..d439e2223c 100644 --- a/tests/forms_tests/tests/test_extra.py +++ b/tests/forms_tests/tests/test_extra.py @@ -391,7 +391,7 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin): def decompress(self, value): if value: data = value.split(',') - return [data[0], data[1], datetime.datetime.strptime(data[2], "%Y-%m-%d %H:%M:%S")] + return [data[0], list(data[1]), datetime.datetime.strptime(data[2], "%Y-%m-%d %H:%M:%S")] return [None, None, None] def format_output(self, rendered_widgets): diff --git a/tests/forms_tests/tests/test_fields.py b/tests/forms_tests/tests/test_fields.py index dab67b4366..f02593e488 100644 --- a/tests/forms_tests/tests/test_fields.py +++ b/tests/forms_tests/tests/test_fields.py @@ -1247,6 +1247,7 @@ class FieldsTests(SimpleTestCase): def test_splitdatetimefield_changed(self): f = SplitDateTimeField(input_date_formats=['%d/%m/%Y']) + self.assertFalse(f._has_changed(['11/01/2012', '09:18:15'], ['11/01/2012', '09:18:15'])) self.assertTrue(f._has_changed(datetime.datetime(2008, 5, 6, 12, 40, 00), ['2008-05-06', '12:40:00'])) self.assertFalse(f._has_changed(datetime.datetime(2008, 5, 6, 12, 40, 00), ['06/05/2008', '12:40'])) self.assertTrue(f._has_changed(datetime.datetime(2008, 5, 6, 12, 40, 00), ['06/05/2008', '12:41']))