Commit c6c00fbf authored by Curtis Maloney's avatar Curtis Maloney Committed by Tim Graham
Browse files

Used @cached_property for BaseForm.changed_data.

parent 9f73009e
Loading
Loading
Loading
Loading
+23 −24
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ from django.utils import six
from django.utils.encoding import (
    force_text, python_2_unicode_compatible, smart_text,
)
from django.utils.functional import cached_property
from django.utils.html import conditional_escape, format_html, html_safe
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext as _
@@ -92,7 +93,6 @@ class BaseForm(object):
        self.label_suffix = label_suffix if label_suffix is not None else _(':')
        self.empty_permitted = empty_permitted
        self._errors = None  # Stores the errors after clean() has been called.
        self._changed_data = None

        # The base_fields class attribute is the *class-wide* definition of
        # fields. Because a particular *instance* of the class might want to
@@ -434,10 +434,9 @@ class BaseForm(object):
        """
        return bool(self.changed_data)

    @property
    @cached_property
    def changed_data(self):
        if self._changed_data is None:
            self._changed_data = []
        data = []
        for name, field in self.fields.items():
            prefixed_name = self.add_prefix(name)
            data_value = field.widget.value_from_datadict(self.data, self.files, prefixed_name)
@@ -453,11 +452,11 @@ class BaseForm(object):
                        self.data, self.files, initial_prefixed_name))
                except ValidationError:
                    # Always assume data has changed if validation fails.
                        self._changed_data.append(name)
                    data.append(name)
                    continue
            if field.has_changed(initial_value, data_value):
                    self._changed_data.append(name)
        return self._changed_data
                data.append(name)
        return data

    @property
    def media(self):