1
0
mirror of https://github.com/django/django.git synced 2025-10-23 21:59:11 +00:00

Fixed #34840 -- Avoided casting string base fields on PostgreSQL.

Thanks Alex Vandiver for the report.

Regression in 09ffc5c121.
This commit is contained in:
Mariusz Felisiak
2023-09-22 06:01:11 +02:00
committed by GitHub
parent 78b5c90753
commit 779cd28acb
6 changed files with 78 additions and 12 deletions

View File

@@ -995,6 +995,42 @@ class UniqueConstraintTests(TestCase):
exclude={"name"},
)
def test_validate_nullable_textfield_with_isnull_true(self):
is_null_constraint = models.UniqueConstraint(
"price",
"discounted_price",
condition=models.Q(unit__isnull=True),
name="uniq_prices_no_unit",
)
is_not_null_constraint = models.UniqueConstraint(
"price",
"discounted_price",
condition=models.Q(unit__isnull=False),
name="uniq_prices_unit",
)
Product.objects.create(price=2, discounted_price=1)
Product.objects.create(price=4, discounted_price=3, unit="ng/mL")
msg = "Constraint “uniq_prices_no_unit” is violated."
with self.assertRaisesMessage(ValidationError, msg):
is_null_constraint.validate(
Product, Product(price=2, discounted_price=1, unit=None)
)
is_null_constraint.validate(
Product, Product(price=2, discounted_price=1, unit="ng/mL")
)
is_null_constraint.validate(Product, Product(price=4, discounted_price=3))
msg = "Constraint “uniq_prices_unit” is violated."
with self.assertRaisesMessage(ValidationError, msg):
is_not_null_constraint.validate(
Product,
Product(price=4, discounted_price=3, unit="μg/mL"),
)
is_not_null_constraint.validate(Product, Product(price=4, discounted_price=3))
is_not_null_constraint.validate(Product, Product(price=2, discounted_price=1))
def test_name(self):
constraints = get_constraints(UniqueConstraintProduct._meta.db_table)
expected_name = "name_color_uniq"