diff --git a/django/forms/boundfield.py b/django/forms/boundfield.py index 88adadb37d..54f9e9a64f 100644 --- a/django/forms/boundfield.py +++ b/django/forms/boundfield.py @@ -1,6 +1,7 @@ import datetime import re +from django.core.exceptions import ValidationError from django.forms.utils import flatatt, pretty_name from django.forms.widgets import Textarea, TextInput from django.utils.functional import cached_property @@ -118,7 +119,7 @@ class BoundField: """ Return the data for this BoundField, or None if it wasn't given. """ - return self.form._field_data_value(self.field, self.html_name) + return self.form._widget_data_value(self.field.widget, self.html_name) def value(self): """ @@ -130,6 +131,22 @@ class BoundField: data = self.field.bound_data(self.data, data) return self.field.prepare_value(data) + def _has_changed(self): + field = self.field + if field.show_hidden_initial: + hidden_widget = field.hidden_widget() + initial_value = self.form._widget_data_value( + hidden_widget, self.html_initial_name, + ) + try: + initial_value = field.to_python(initial_value) + except ValidationError: + # Always assume data has changed if validation fails. + return True + else: + initial_value = self.initial + return field.has_changed(initial_value, self.data) + def label_tag(self, contents=None, attrs=None, label_suffix=None): """ Wrap the given contents in a