diff options
| author | L <leven.cn@gmail.com> | 2022-04-22 14:51:39 +0800 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-04-26 07:06:26 +0200 |
| commit | 37602e49484a88867f40e9498f86c49c2d1c5d7c (patch) | |
| tree | 2c0a454c69bb6287a12b4be3ae85751e0f6450d8 | |
| parent | 4282fd468fd11a7db79307ba1c33a4960c299e4a (diff) | |
Fixed #33656 -- Fixed MultiWidget crash when compressed value is a tuple.
| -rw-r--r-- | django/forms/widgets.py | 4 | ||||
| -rw-r--r-- | tests/forms_tests/widget_tests/test_multiwidget.py | 9 | ||||
| -rw-r--r-- | tests/postgres_tests/test_ranges.py | 12 |
3 files changed, 23 insertions, 2 deletions
diff --git a/django/forms/widgets.py b/django/forms/widgets.py index 760579ebe5..fffa7430fc 100644 --- a/django/forms/widgets.py +++ b/django/forms/widgets.py @@ -884,9 +884,9 @@ class MultiWidget(Widget): if self.is_localized: for widget in self.widgets: widget.is_localized = self.is_localized - # value is a list of values, each corresponding to a widget + # value is a list/tuple of values, each corresponding to a widget # in self.widgets. - if not isinstance(value, list): + if not isinstance(value, (list, tuple)): value = self.decompress(value) final_attrs = context["widget"]["attrs"] diff --git a/tests/forms_tests/widget_tests/test_multiwidget.py b/tests/forms_tests/widget_tests/test_multiwidget.py index aac859a4b8..40f099e625 100644 --- a/tests/forms_tests/widget_tests/test_multiwidget.py +++ b/tests/forms_tests/widget_tests/test_multiwidget.py @@ -133,6 +133,15 @@ class MultiWidgetTest(WidgetTest): self.check_html( widget, "name", + ("john", "lennon"), + html=( + '<input type="text" class="big" value="john" name="name_0">' + '<input type="text" class="small" value="lennon" name="name_1">' + ), + ) + self.check_html( + widget, + "name", "john__lennon", html=( '<input type="text" class="big" value="john" name="name_0">' diff --git a/tests/postgres_tests/test_ranges.py b/tests/postgres_tests/test_ranges.py index 86722a9f46..1b155ed51a 100644 --- a/tests/postgres_tests/test_ranges.py +++ b/tests/postgres_tests/test_ranges.py @@ -1094,3 +1094,15 @@ class TestWidget(PostgreSQLSimpleTestCase): '<input type="text" name="datetimerange_0" value="2006-01-10 07:30:00">' '<input type="text" name="datetimerange_1" value="2006-02-12 09:50:00">', ) + + def test_range_widget_render_tuple_value(self): + field = pg_forms.ranges.DateTimeRangeField() + dt_range_tuple = ( + datetime.datetime(2022, 4, 22, 10, 24), + datetime.datetime(2022, 5, 12, 9, 25), + ) + self.assertHTMLEqual( + field.widget.render("datetimerange", dt_range_tuple), + '<input type="text" name="datetimerange_0" value="2022-04-22 10:24:00">' + '<input type="text" name="datetimerange_1" value="2022-05-12 09:25:00">', + ) |
