diff options
| author | Carles Pina <carles@pina.cat> | 2020-05-04 17:41:38 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-06-01 12:48:26 +0200 |
| commit | 56af541790a7acf23fe5c911a4e04969ddac1dc6 (patch) | |
| tree | ac584e9f642c7bad79e8a5e1772c775c6765a642 | |
| parent | 22dac456f34f273b61aa434820c426c9620e28c9 (diff) | |
[3.1.x] Fixed #31536 -- Fixed rendering of disabled AdminFileWidget and ClearableFileInput.
Backport of e46c2326c8cfc038e015f55fd050ab5d7eb91b62 from master
5 files changed, 32 insertions, 3 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 80699d1a50..fe71ebdb06 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 }}"> +<input type="checkbox" name="{{ widget.checkbox_name }}" id="{{ widget.checkbox_id }}"{% if widget.attrs.disabled %} disabled{% 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/django/forms/jinja2/django/forms/widgets/clearable_file_input.html b/django/forms/jinja2/django/forms/widgets/clearable_file_input.html index 9e76435216..93812837f0 100644 --- a/django/forms/jinja2/django/forms/widgets/clearable_file_input.html +++ b/django/forms/jinja2/django/forms/widgets/clearable_file_input.html @@ -1,5 +1,5 @@ {% if widget.is_initial %}{{ widget.initial_text }}: <a href="{{ widget.value.url }}">{{ widget.value }}</a>{% if not widget.required %} -<input type="checkbox" name="{{ widget.checkbox_name }}" id="{{ widget.checkbox_id }}"> +<input type="checkbox" name="{{ widget.checkbox_name }}" id="{{ widget.checkbox_id }}"{% if widget.attrs.disabled %} disabled{% endif %}> <label for="{{ widget.checkbox_id }}">{{ widget.clear_checkbox_label }}</label>{% endif %}<br> {{ widget.input_text }}:{% endif %} <input type="{{ widget.type }}" name="{{ widget.name }}"{% include "django/forms/widgets/attrs.html" %}> diff --git a/django/forms/templates/django/forms/widgets/clearable_file_input.html b/django/forms/templates/django/forms/widgets/clearable_file_input.html index 9e76435216..93812837f0 100644 --- a/django/forms/templates/django/forms/widgets/clearable_file_input.html +++ b/django/forms/templates/django/forms/widgets/clearable_file_input.html @@ -1,5 +1,5 @@ {% if widget.is_initial %}{{ widget.initial_text }}: <a href="{{ widget.value.url }}">{{ widget.value }}</a>{% if not widget.required %} -<input type="checkbox" name="{{ widget.checkbox_name }}" id="{{ widget.checkbox_id }}"> +<input type="checkbox" name="{{ widget.checkbox_name }}" id="{{ widget.checkbox_id }}"{% if widget.attrs.disabled %} disabled{% endif %}> <label for="{{ widget.checkbox_id }}">{{ widget.clear_checkbox_label }}</label>{% endif %}<br> {{ widget.input_text }}:{% endif %} <input type="{{ widget.type }}" name="{{ widget.name }}"{% include "django/forms/widgets/attrs.html" %}> diff --git a/tests/admin_widgets/tests.py b/tests/admin_widgets/tests.py index 7241ea9554..b60d01e43f 100644 --- a/tests/admin_widgets/tests.py +++ b/tests/admin_widgets/tests.py @@ -487,6 +487,20 @@ class AdminFileWidgetTests(TestDataMixin, TestCase): }, ) + def test_render_disabled(self): + widget = widgets.AdminFileWidget(attrs={'disabled': True}) + self.assertHTMLEqual( + widget.render('test', self.album.cover_art), + '<p class="file-upload">Currently: <a href="%(STORAGE_URL)salbums/' + r'hybrid_theory.jpg">albums\hybrid_theory.jpg</a> ' + '<span class="clearable-file-input">' + '<input type="checkbox" name="test-clear" id="test-clear_id" disabled>' + '<label for="test-clear_id">Clear</label></span><br>' + 'Change: <input type="file" name="test" disabled></p>' % { + 'STORAGE_URL': default_storage.url(''), + }, + ) + def test_readonly_fields(self): """ File widgets should render as a link when they're marked "read only." diff --git a/tests/forms_tests/widget_tests/test_clearablefileinput.py b/tests/forms_tests/widget_tests/test_clearablefileinput.py index fabf71934f..dee44c4239 100644 --- a/tests/forms_tests/widget_tests/test_clearablefileinput.py +++ b/tests/forms_tests/widget_tests/test_clearablefileinput.py @@ -74,6 +74,21 @@ class ClearableFileInputTest(WidgetTest): """ self.check_html(self.widget, 'myfile', None, html='<input type="file" name="myfile">') + def test_render_disabled(self): + self.check_html( + self.widget, + 'myfile', + FakeFieldFile(), + attrs={'disabled': True}, + html=( + 'Currently: <a href="something">something</a>' + '<input type="checkbox" name="myfile-clear" ' + 'id="myfile-clear_id" disabled>' + '<label for="myfile-clear_id">Clear</label><br>' + 'Change: <input type="file" name="myfile" disabled>' + ), + ) + def test_render_as_subwidget(self): """A ClearableFileInput as a subwidget of MultiWidget.""" widget = MultiWidget(widgets=(self.widget,)) |
