Fixed #35273 -- Fixed rendering AdminFileWidget's attributes.

Regression in 8a6c0203c4.
This commit is contained in:
Johannes Maron 2024-03-06 21:18:36 +01:00 committed by Mariusz Felisiak
parent 175b04942a
commit e69019555d
3 changed files with 32 additions and 1 deletions

View File

@ -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 %}

View File

@ -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`).

View File

@ -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."