|
@@ -3,7 +3,7 @@ from unittest import mock
|
|
|
from django.core.exceptions import ValidationError
|
|
|
from django.db import IntegrityError, connection, models
|
|
|
from django.db.models import F
|
|
|
-from django.db.models.constraints import BaseConstraint
|
|
|
+from django.db.models.constraints import BaseConstraint, UniqueConstraint
|
|
|
from django.db.models.functions import Lower
|
|
|
from django.db.transaction import atomic
|
|
|
from django.test import SimpleTestCase, TestCase, skipIfDBFeature, skipUnlessDBFeature
|
|
@@ -589,6 +589,26 @@ class UniqueConstraintTests(TestCase):
|
|
|
with self.assertRaisesMessage(ValidationError, msg):
|
|
|
UniqueConstraintConditionProduct(name=obj2.name).validate_constraints()
|
|
|
|
|
|
+ def test_model_validation_constraint_no_code_error(self):
|
|
|
+ class ValidateNoCodeErrorConstraint(UniqueConstraint):
|
|
|
+ def validate(self, model, instance, **kwargs):
|
|
|
+ raise ValidationError({"name": ValidationError("Already exists.")})
|
|
|
+
|
|
|
+ class NoCodeErrorConstraintModel(models.Model):
|
|
|
+ name = models.CharField(max_length=255)
|
|
|
+
|
|
|
+ class Meta:
|
|
|
+ constraints = [
|
|
|
+ ValidateNoCodeErrorConstraint(
|
|
|
+ Lower("name"),
|
|
|
+ name="custom_validate_no_code_error",
|
|
|
+ )
|
|
|
+ ]
|
|
|
+
|
|
|
+ msg = "{'name': ['Already exists.']}"
|
|
|
+ with self.assertRaisesMessage(ValidationError, msg):
|
|
|
+ NoCodeErrorConstraintModel(name="test").validate_constraints()
|
|
|
+
|
|
|
def test_validate(self):
|
|
|
constraint = UniqueConstraintProduct._meta.constraints[0]
|
|
|
msg = "Unique constraint product with this Name and Color already exists."
|