summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2017-02-03 11:11:39 -0500
committerTim Graham <timograham@gmail.com>2017-02-06 21:10:44 -0500
commitcd69ac06d6e415f74e9566aa6473e8b577e29074 (patch)
tree730422d501e2c143b1192f9c820a348bc272d98a
parent82e316ea54b135dc5621a8625c5e38398ad38571 (diff)
[1.10.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.py6
-rw-r--r--docs/releases/1.10.6.txt3
-rw-r--r--tests/forms_tests/widget_tests/test_clearablefileinput.py6
3 files changed, 14 insertions, 1 deletions
diff --git a/django/forms/widgets.py b/django/forms/widgets.py
index 1d5fabe064..179341636c 100644
--- a/django/forms/widgets.py
+++ b/django/forms/widgets.py
@@ -440,6 +440,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):
def __init__(self, attrs=None):
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)