mirror of
https://github.com/django/django.git
synced 2025-10-24 14:16:09 +00:00
Fixed #34319 -- Fixed Model.validate_constraints() crash on ValidationError with no code.
Thanks Mateusz Kurowski for the report.
Regression in 667105877e.
This commit is contained in:
@@ -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."
|
||||
|
||||
Reference in New Issue
Block a user