mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +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:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user