diff options
| author | Tim Graham <timograham@gmail.com> | 2017-02-03 11:11:39 -0500 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2017-02-06 20:55:47 -0500 |
| commit | 2b17e4770bc02b4bf6864b21587feae815768613 (patch) | |
| tree | 58d262abffcd4a1056beb5e2ecbfaf44a35804e7 | |
| parent | f14899412d2fa779e3f8dbfa6e63b8a6a7a765a5 (diff) | |
[1.11.x] Fixed #27805 -- Fixed ClearableFileInput's "Clear" checkbox on model fields with a default.
Backport of 4353640ea9495d58fabd0357253b82de3b069408 from master
| -rw-r--r-- | django/forms/widgets.py | 6 | ||||
| -rw-r--r-- | docs/releases/1.10.6.txt | 3 | ||||
| -rw-r--r-- | tests/forms_tests/widget_tests/test_clearablefileinput.py | 6 |
3 files changed, 14 insertions, 1 deletions
diff --git a/django/forms/widgets.py b/django/forms/widgets.py index 594b578431..aca599ff9a 100644 --- a/django/forms/widgets.py +++ b/django/forms/widgets.py @@ -437,6 +437,12 @@ class ClearableFileInput(FileInput): def use_required_attribute(self, initial): return super(ClearableFileInput, self).use_required_attribute(initial) and not initial + def value_omitted_from_data(self, data, files, name): + return ( + super(ClearableFileInput, self).value_omitted_from_data(data, files, name) and + self.clear_checkbox_name(name) not in data + ) + class Textarea(Widget): template_name = 'django/forms/widgets/textarea.html' diff --git a/docs/releases/1.10.6.txt b/docs/releases/1.10.6.txt index 5cd502b3f6..dc5c49938f 100644 --- a/docs/releases/1.10.6.txt +++ b/docs/releases/1.10.6.txt @@ -9,4 +9,5 @@ Django 1.10.6 fixes several bugs in 1.10.5. Bugfixes ======== -* ... +* Fixed ``ClearableFileInput``’s "Clear" checkbox on model form fields where + the model field has a ``default`` (:ticket:`27805`). diff --git a/tests/forms_tests/widget_tests/test_clearablefileinput.py b/tests/forms_tests/widget_tests/test_clearablefileinput.py index 3727d0c0df..1e52f0f62e 100644 --- a/tests/forms_tests/widget_tests/test_clearablefileinput.py +++ b/tests/forms_tests/widget_tests/test_clearablefileinput.py @@ -149,3 +149,9 @@ class ClearableFileInputTest(WidgetTest): # user to keep the existing, initial value. self.assertIs(self.widget.use_required_attribute(None), True) self.assertIs(self.widget.use_required_attribute('resume.txt'), False) + + def test_value_omitted_from_data(self): + widget = ClearableFileInput() + self.assertIs(widget.value_omitted_from_data({}, {}, 'field'), True) + self.assertIs(widget.value_omitted_from_data({}, {'field': 'x'}, 'field'), False) + self.assertIs(widget.value_omitted_from_data({'field-clear': 'y'}, {}, 'field'), False) |
