diff options
| author | Simon Charette <charette.s@gmail.com> | 2025-02-18 12:43:38 -0500 |
|---|---|---|
| committer | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2025-08-04 09:41:29 +0200 |
| commit | e5ccb69bc3da407ab2b0477c0cc5db27c7207225 (patch) | |
| tree | a5bbe4747edc65c6c3dc056942b34c473513ee39 /tests/constraints | |
| parent | 5aefd005fc3dd35be6e9e4a24f9c2bc92b69df3b (diff) | |
[5.2.x] Fixed #36198 -- Implemented unresolved transform expression replacement.
This allows the proper resolving of F("field__transform") when
performing constraint validation.
Thanks Tom Hall for the report and Sarah for the test.
Prerequisite for #36518.
Backport of fc303551077c3e023fe4f9d01fc1b3026c816fa4 from main.
Diffstat (limited to 'tests/constraints')
| -rw-r--r-- | tests/constraints/models.py | 1 | ||||
| -rw-r--r-- | tests/constraints/tests.py | 18 |
2 files changed, 19 insertions, 0 deletions
diff --git a/tests/constraints/models.py b/tests/constraints/models.py index 95a29ffa4d..41b827640e 100644 --- a/tests/constraints/models.py +++ b/tests/constraints/models.py @@ -73,6 +73,7 @@ class UniqueConstraintProduct(models.Model): name = models.CharField(max_length=255) color = models.CharField(max_length=32, null=True) age = models.IntegerField(null=True) + updated = models.DateTimeField(null=True) class Meta: constraints = [ diff --git a/tests/constraints/tests.py b/tests/constraints/tests.py index 9047710098..e67a32b806 100644 --- a/tests/constraints/tests.py +++ b/tests/constraints/tests.py @@ -1,3 +1,4 @@ +from datetime import datetime, timedelta from unittest import mock from django.core.exceptions import ValidationError @@ -1059,6 +1060,23 @@ class UniqueConstraintTests(TestCase): exclude={"name"}, ) + def test_validate_field_transform(self): + updated_date = datetime(2005, 7, 26) + UniqueConstraintProduct.objects.create(name="p1", updated=updated_date) + constraint = models.UniqueConstraint( + models.F("updated__date"), name="date_created_unique" + ) + msg = "Constraint “date_created_unique” is violated." + with self.assertRaisesMessage(ValidationError, msg): + constraint.validate( + UniqueConstraintProduct, + UniqueConstraintProduct(updated=updated_date), + ) + constraint.validate( + UniqueConstraintProduct, + UniqueConstraintProduct(updated=updated_date + timedelta(days=1)), + ) + def test_validate_ordered_expression(self): constraint = models.UniqueConstraint( Lower("name").desc(), name="name_lower_uniq_desc" |
