diff options
| author | Johannes Maron <johannes@maron.family> | 2024-03-06 21:18:36 +0100 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2024-03-14 14:03:09 +0100 |
| commit | e69019555d683fd6a831f87cb09e3deb86e4e7c7 (patch) | |
| tree | c2e47134e5ba851f4ea48b2daa17b30de2441c7c | |
| parent | 175b04942afaff978013db61495f3b39ea12989b (diff) | |
Fixed #35273 -- Fixed rendering AdminFileWidget's attributes.
Regression in 8a6c0203c4e92908c2b26ba54feba4ce7e76d081.
| -rw-r--r-- | django/contrib/admin/templates/admin/widgets/clearable_file_input.html | 2 | ||||
| -rw-r--r-- | docs/releases/5.0.4.txt | 4 | ||||
| -rw-r--r-- | tests/admin_widgets/tests.py | 27 |
3 files changed, 32 insertions, 1 deletions
diff --git a/django/contrib/admin/templates/admin/widgets/clearable_file_input.html b/django/contrib/admin/templates/admin/widgets/clearable_file_input.html index ab35253a0d..8b42f192f1 100644 --- a/django/contrib/admin/templates/admin/widgets/clearable_file_input.html +++ b/django/contrib/admin/templates/admin/widgets/clearable_file_input.html @@ -1,6 +1,6 @@ {% if widget.is_initial %}<p class="file-upload">{{ widget.initial_text }}: <a href="{{ widget.value.url }}">{{ widget.value }}</a>{% if not widget.required %} <span class="clearable-file-input"> -<input type="checkbox" name="{{ widget.checkbox_name }}" id="{{ widget.checkbox_id }}"{% include "django/forms/widgets/attrs.html" %}> +<input type="checkbox" name="{{ widget.checkbox_name }}" id="{{ widget.checkbox_id }}"{% if widget.attrs.disabled %} disabled{% endif %}{% if widget.attrs.checked %} checked{% endif %}> <label for="{{ widget.checkbox_id }}">{{ widget.clear_checkbox_label }}</label></span>{% endif %}<br> {{ widget.input_text }}:{% endif %} <input type="{{ widget.type }}" name="{{ widget.name }}"{% include "django/forms/widgets/attrs.html" %}>{% if widget.is_initial %}</p>{% endif %} diff --git a/docs/releases/5.0.4.txt b/docs/releases/5.0.4.txt index d15c28d83d..9b2fd6b170 100644 --- a/docs/releases/5.0.4.txt +++ b/docs/releases/5.0.4.txt @@ -13,3 +13,7 @@ Bugfixes fields with expressions in ``db_default``. As a consequence, ``Model.full_clean()`` no longer validates for empty values in fields with ``db_default`` (:ticket:`35223`). + +* Fixed a regression in Django 5.0 where the ``AdminFileWidget`` could be + rendered with two ``id`` attributes on the "Clear" checkbox + (:ticket:`35273`). diff --git a/tests/admin_widgets/tests.py b/tests/admin_widgets/tests.py index 50c26095ff..76a47e4868 100644 --- a/tests/admin_widgets/tests.py +++ b/tests/admin_widgets/tests.py @@ -590,6 +590,19 @@ class AdminFileWidgetTests(TestDataMixin, TestCase): '<input type="file" name="test">', ) + def test_render_with_attrs_id(self): + storage_url = default_storage.url("") + w = widgets.AdminFileWidget() + self.assertHTMLEqual( + w.render("test", self.album.cover_art, attrs={"id": "test_id"}), + f'<p class="file-upload">Currently: <a href="{storage_url}albums/' + r'hybrid_theory.jpg">albums\hybrid_theory.jpg</a> ' + '<span class="clearable-file-input">' + '<input type="checkbox" name="test-clear" id="test-clear_id"> ' + '<label for="test-clear_id">Clear</label></span><br>' + 'Change: <input type="file" name="test" id="test_id"></p>', + ) + def test_render_required(self): widget = widgets.AdminFileWidget() widget.is_required = True @@ -618,6 +631,20 @@ class AdminFileWidgetTests(TestDataMixin, TestCase): }, ) + def test_render_checked(self): + storage_url = default_storage.url("") + widget = widgets.AdminFileWidget() + widget.checked = True + self.assertHTMLEqual( + widget.render("test", self.album.cover_art), + f'<p class="file-upload">Currently: <a href="{storage_url}albums/' + r'hybrid_theory.jpg">albums\hybrid_theory.jpg</a> ' + '<span class="clearable-file-input">' + '<input type="checkbox" name="test-clear" id="test-clear_id" checked>' + '<label for="test-clear_id">Clear</label></span><br>' + 'Change: <input type="file" name="test" checked></p>', + ) + def test_readonly_fields(self): """ File widgets should render as a link when they're marked "read only." |
