From 58e856527cde541a40307abca0ea579c11f2c938 Mon Sep 17 00:00:00 2001 From: Sergei Aleshin Date: Wed, 20 Aug 2025 13:52:33 +0400 Subject: [PATCH] fix: add model parents to create unique_constraint_by_fields --- rest_framework/serializers.py | 4 +++- tests/test_validators.py | 8 +------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index f71ada502..de737fc3b 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -1607,7 +1607,9 @@ class ModelSerializer(Serializer): source_map[source].append(name) unique_constraint_by_fields = { - constraint.fields: constraint for constraint in self.Meta.model._meta.constraints + constraint.fields: constraint + for model_cls in (self.Meta.model, *self.Meta.model._meta.parents) + for constraint in model_cls._meta.constraints if isinstance(constraint, models.UniqueConstraint) } diff --git a/tests/test_validators.py b/tests/test_validators.py index d9915eba8..79d4c0cf8 100644 --- a/tests/test_validators.py +++ b/tests/test_validators.py @@ -627,13 +627,7 @@ class UniqueConstraintCustomMessageCodeModel(models.Model): fields=("username", "company_id"), name="unique_username_company_custom_msg", violation_error_message="Username must be unique within a company.", - violation_error_code="duplicate_username", - ) - if django_version[0] >= 5 - else models.UniqueConstraint( - fields=("username", "company_id"), - name="unique_username_company_custom_msg", - violation_error_message="Username must be unique within a company.", + **(dict(violation_error_code="duplicate_username") if django_version[0] >= 5 else {}), ), models.UniqueConstraint( fields=("company_id", "role"),