mirror of https://github.com/django/django.git
Used sets for field names for exclusion.
They are used only for containment checks.
This commit is contained in:
parent
bf524d229f
commit
1ea7e3157d
|
@ -1214,7 +1214,7 @@ class Model(metaclass=ModelBase):
|
||||||
but they need to be passed in via the exclude argument.
|
but they need to be passed in via the exclude argument.
|
||||||
"""
|
"""
|
||||||
if exclude is None:
|
if exclude is None:
|
||||||
exclude = []
|
exclude = set()
|
||||||
unique_checks = []
|
unique_checks = []
|
||||||
|
|
||||||
unique_togethers = [(self.__class__, self._meta.unique_together)]
|
unique_togethers = [(self.__class__, self._meta.unique_together)]
|
||||||
|
@ -1401,9 +1401,9 @@ class Model(metaclass=ModelBase):
|
||||||
"""
|
"""
|
||||||
errors = {}
|
errors = {}
|
||||||
if exclude is None:
|
if exclude is None:
|
||||||
exclude = []
|
exclude = set()
|
||||||
else:
|
else:
|
||||||
exclude = list(exclude)
|
exclude = set(exclude)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.clean_fields(exclude=exclude)
|
self.clean_fields(exclude=exclude)
|
||||||
|
@ -1421,7 +1421,7 @@ class Model(metaclass=ModelBase):
|
||||||
if validate_unique:
|
if validate_unique:
|
||||||
for name in errors:
|
for name in errors:
|
||||||
if name != NON_FIELD_ERRORS and name not in exclude:
|
if name != NON_FIELD_ERRORS and name not in exclude:
|
||||||
exclude.append(name)
|
exclude.add(name)
|
||||||
try:
|
try:
|
||||||
self.validate_unique(exclude=exclude)
|
self.validate_unique(exclude=exclude)
|
||||||
except ValidationError as e:
|
except ValidationError as e:
|
||||||
|
@ -1436,7 +1436,7 @@ class Model(metaclass=ModelBase):
|
||||||
of all validation errors if any occur.
|
of all validation errors if any occur.
|
||||||
"""
|
"""
|
||||||
if exclude is None:
|
if exclude is None:
|
||||||
exclude = []
|
exclude = set()
|
||||||
|
|
||||||
errors = {}
|
errors = {}
|
||||||
for f in self._meta.fields:
|
for f in self._meta.fields:
|
||||||
|
|
|
@ -388,7 +388,7 @@ class BaseModelForm(BaseForm):
|
||||||
For backwards-compatibility, exclude several types of fields from model
|
For backwards-compatibility, exclude several types of fields from model
|
||||||
validation. See tickets #12507, #12521, #12553.
|
validation. See tickets #12507, #12521, #12553.
|
||||||
"""
|
"""
|
||||||
exclude = []
|
exclude = set()
|
||||||
# Build up a list of fields that should be excluded from model field
|
# Build up a list of fields that should be excluded from model field
|
||||||
# validation and unique checks.
|
# validation and unique checks.
|
||||||
for f in self.instance._meta.fields:
|
for f in self.instance._meta.fields:
|
||||||
|
@ -396,20 +396,20 @@ class BaseModelForm(BaseForm):
|
||||||
# Exclude fields that aren't on the form. The developer may be
|
# Exclude fields that aren't on the form. The developer may be
|
||||||
# adding these values to the model after form validation.
|
# adding these values to the model after form validation.
|
||||||
if field not in self.fields:
|
if field not in self.fields:
|
||||||
exclude.append(f.name)
|
exclude.add(f.name)
|
||||||
|
|
||||||
# Don't perform model validation on fields that were defined
|
# Don't perform model validation on fields that were defined
|
||||||
# manually on the form and excluded via the ModelForm's Meta
|
# manually on the form and excluded via the ModelForm's Meta
|
||||||
# class. See #12901.
|
# class. See #12901.
|
||||||
elif self._meta.fields and field not in self._meta.fields:
|
elif self._meta.fields and field not in self._meta.fields:
|
||||||
exclude.append(f.name)
|
exclude.add(f.name)
|
||||||
elif self._meta.exclude and field in self._meta.exclude:
|
elif self._meta.exclude and field in self._meta.exclude:
|
||||||
exclude.append(f.name)
|
exclude.add(f.name)
|
||||||
|
|
||||||
# Exclude fields that failed form validation. There's no need for
|
# Exclude fields that failed form validation. There's no need for
|
||||||
# the model fields to validate them as well.
|
# the model fields to validate them as well.
|
||||||
elif field in self._errors:
|
elif field in self._errors:
|
||||||
exclude.append(f.name)
|
exclude.add(f.name)
|
||||||
|
|
||||||
# Exclude empty fields that are not required by the form, if the
|
# Exclude empty fields that are not required by the form, if the
|
||||||
# underlying model field is required. This keeps the model field
|
# underlying model field is required. This keeps the model field
|
||||||
|
@ -425,7 +425,7 @@ class BaseModelForm(BaseForm):
|
||||||
and not form_field.required
|
and not form_field.required
|
||||||
and field_value in form_field.empty_values
|
and field_value in form_field.empty_values
|
||||||
):
|
):
|
||||||
exclude.append(f.name)
|
exclude.add(f.name)
|
||||||
return exclude
|
return exclude
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
|
@ -479,7 +479,7 @@ class BaseModelForm(BaseForm):
|
||||||
# so this can't be part of _get_validation_exclusions().
|
# so this can't be part of _get_validation_exclusions().
|
||||||
for name, field in self.fields.items():
|
for name, field in self.fields.items():
|
||||||
if isinstance(field, InlineForeignKeyField):
|
if isinstance(field, InlineForeignKeyField):
|
||||||
exclude.append(name)
|
exclude.add(name)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.instance = construct_instance(
|
self.instance = construct_instance(
|
||||||
|
|
Loading…
Reference in New Issue