From a3b5df8ed503ea559d2ffaca7ec0c735d98f1a38 Mon Sep 17 00:00:00 2001 From: Srinivas Reddy Thatiparthy Date: Thu, 13 Jul 2017 20:25:32 +0530 Subject: [1.11.x] Fixed #28387 -- Fixed has_changed() for disabled form fields that subclass it. Backport of 5debbdfcc84266703191e084914998e38f5f52eb from master --- django/forms/fields.py | 8 ++++++++ django/forms/models.py | 4 ++++ 2 files changed, 12 insertions(+) (limited to 'django/forms') diff --git a/django/forms/fields.py b/django/forms/fields.py index 33ed2882a3..f2b5b77185 100644 --- a/django/forms/fields.py +++ b/django/forms/fields.py @@ -604,6 +604,8 @@ class FileField(Field): return data def has_changed(self, initial, data): + if self.disabled: + return False if data is None: return False return True @@ -724,6 +726,8 @@ class BooleanField(Field): raise ValidationError(self.error_messages['required'], code='required') def has_changed(self, initial, data): + if self.disabled: + return False # Sometimes data or initial may be a string equivalent of a boolean # so we should run it through to_python first to get a boolean value return self.to_python(initial) != self.to_python(data) @@ -891,6 +895,8 @@ class MultipleChoiceField(ChoiceField): ) def has_changed(self, initial, data): + if self.disabled: + return False if initial is None: initial = [] if data is None: @@ -1069,6 +1075,8 @@ class MultiValueField(Field): raise NotImplementedError('Subclasses must implement this method.') def has_changed(self, initial, data): + if self.disabled: + return False if initial is None: initial = ['' for x in range(0, len(data))] else: diff --git a/django/forms/models.py b/django/forms/models.py index 132e4255bb..db710a2ed2 100644 --- a/django/forms/models.py +++ b/django/forms/models.py @@ -1244,6 +1244,8 @@ class ModelChoiceField(ChoiceField): return Field.validate(self, value) def has_changed(self, initial, data): + if self.disabled: + return False initial_value = initial if initial is not None else '' data_value = data if data is not None else '' return force_text(self.prepare_value(initial_value)) != force_text(data_value) @@ -1331,6 +1333,8 @@ class ModelMultipleChoiceField(ModelChoiceField): return super(ModelMultipleChoiceField, self).prepare_value(value) def has_changed(self, initial, data): + if self.disabled: + return False if initial is None: initial = [] if data is None: -- cgit v1.3