Move field check to validate_constraints()

This commit is contained in:
David Sanders 2022-09-16 18:40:23 +10:00
parent d5f9fe60ba
commit 328bede9fb
2 changed files with 10 additions and 7 deletions

View File

@ -1441,7 +1441,15 @@ class Model(metaclass=ModelBase):
try:
constraint.validate(model_class, self, exclude=exclude, using=using)
except ValidationError as e:
if e.code == "unique" and len(constraint.fields) == 1:
if (
e.code == "unique"
and len(constraint.fields) == 1
and (
constraint.condition is None
or set(constraint.fields)
== constraint.condition.referenced_base_fields
)
):
errors.setdefault(constraint.fields[0], []).append(e)
else:
errors = e.update_error_dict(errors)

View File

@ -364,13 +364,8 @@ class UniqueConstraint(BaseConstraint):
if (self.condition & Exists(queryset.filter(self.condition))).check(
against, using=using
):
code = (
"unique"
if self.condition.referenced_base_fields == set(self.fields)
else None
)
raise ValidationError(
message=self.get_violation_error_message(), code=code
message=self.get_violation_error_message(), code="unique"
)
except FieldError:
pass