summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/forms/fields.py4
-rw-r--r--tests/forms_tests/field_tests/test_base.py6
2 files changed, 10 insertions, 0 deletions
diff --git a/django/forms/fields.py b/django/forms/fields.py
index d9552c28fe..74cc3a6552 100644
--- a/django/forms/fields.py
+++ b/django/forms/fields.py
@@ -187,6 +187,10 @@ class Field(object):
"""
Return True if data differs from initial.
"""
+ # Always return False if the field is disabled since self.bound_data
+ # always uses the initial value in this case.
+ if self.disabled:
+ return False
try:
data = self.to_python(data)
if hasattr(self, '_coerce'):
diff --git a/tests/forms_tests/field_tests/test_base.py b/tests/forms_tests/field_tests/test_base.py
index 802af3b183..67c3003393 100644
--- a/tests/forms_tests/field_tests/test_base.py
+++ b/tests/forms_tests/field_tests/test_base.py
@@ -34,3 +34,9 @@ class BasicFieldsTests(SimpleTestCase):
f.fields['field2'].choices = [('2', '2')]
self.assertEqual(f.fields['field1'].widget.choices, [('1', '1')])
self.assertEqual(f.fields['field2'].widget.choices, [('2', '2')])
+
+
+class DisabledFieldTests(SimpleTestCase):
+ def test_disabled_field_has_changed_always_false(self):
+ disabled_field = Field(disabled=True)
+ self.assertFalse(disabled_field.has_changed('x', 'y'))