From d9b91e38361696014bdc98434d6d018eae809519 Mon Sep 17 00:00:00 2001 From: Syed Waheed <105697767+Waheedsys@users.noreply.github.com> Date: Tue, 23 Jan 2024 14:17:31 +0530 Subject: [PATCH] Fixed #32923 -- Refactored out Field._clean_bound_field(). --- django/forms/fields.py | 8 ++++++++ django/forms/forms.py | 9 ++------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/django/forms/fields.py b/django/forms/fields.py index 62d68985c0..4ec7b7aee7 100644 --- a/django/forms/fields.py +++ b/django/forms/fields.py @@ -261,6 +261,10 @@ class Field: result.validators = self.validators[:] return result + def _clean_bound_field(self, bf): + value = bf.initial if self.disabled else bf.data + return self.clean(value) + class CharField(Field): def __init__( @@ -694,6 +698,10 @@ class FileField(Field): def has_changed(self, initial, data): return not self.disabled and data is not None + def _clean_bound_field(self, bf): + value = bf.initial if self.disabled else bf.data + return self.clean(value, bf.initial) + class ImageField(FileField): default_validators = [validators.validate_image_file_extension] diff --git a/django/forms/forms.py b/django/forms/forms.py index 5de14d598a..452f554e1e 100644 --- a/django/forms/forms.py +++ b/django/forms/forms.py @@ -6,7 +6,7 @@ import copy import datetime from django.core.exceptions import NON_FIELD_ERRORS, ValidationError -from django.forms.fields import Field, FileField +from django.forms.fields import Field from django.forms.utils import ErrorDict, ErrorList, RenderableFormMixin from django.forms.widgets import Media, MediaDefiningClass from django.utils.datastructures import MultiValueDict @@ -329,13 +329,8 @@ class BaseForm(RenderableFormMixin): def _clean_fields(self): for name, bf in self._bound_items(): field = bf.field - value = bf.initial if field.disabled else bf.data try: - if isinstance(field, FileField): - value = field.clean(value, bf.initial) - else: - value = field.clean(value) - self.cleaned_data[name] = value + self.cleaned_data[name] = field._clean_bound_field(bf) if hasattr(self, "clean_%s" % name): value = getattr(self, "clean_%s" % name)() self.cleaned_data[name] = value