mirror of
https://github.com/django/django.git
synced 2025-01-18 06:12:23 +00:00
Refs #33829 -- Added violation_error_message to constraints' __repr__().
This commit is contained in:
parent
dcd9746983
commit
51c9bb7cd1
@ -154,7 +154,7 @@ class ExclusionConstraint(BaseConstraint):
|
|||||||
return super().__eq__(other)
|
return super().__eq__(other)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "<%s: index_type=%s expressions=%s name=%s%s%s%s>" % (
|
return "<%s: index_type=%s expressions=%s name=%s%s%s%s%s>" % (
|
||||||
self.__class__.__qualname__,
|
self.__class__.__qualname__,
|
||||||
repr(self.index_type),
|
repr(self.index_type),
|
||||||
repr(self.expressions),
|
repr(self.expressions),
|
||||||
@ -162,6 +162,12 @@ class ExclusionConstraint(BaseConstraint):
|
|||||||
"" if self.condition is None else " condition=%s" % self.condition,
|
"" if self.condition is None else " condition=%s" % self.condition,
|
||||||
"" if self.deferrable is None else " deferrable=%r" % self.deferrable,
|
"" if self.deferrable is None else " deferrable=%r" % self.deferrable,
|
||||||
"" if not self.include else " include=%s" % repr(self.include),
|
"" if not self.include else " include=%s" % repr(self.include),
|
||||||
|
(
|
||||||
|
""
|
||||||
|
if self.violation_error_message is None
|
||||||
|
or self.violation_error_message == self.default_violation_error_message
|
||||||
|
else " violation_error_message=%r" % self.violation_error_message
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
def validate(self, model, instance, exclude=None, using=DEFAULT_DB_ALIAS):
|
def validate(self, model, instance, exclude=None, using=DEFAULT_DB_ALIAS):
|
||||||
|
@ -117,10 +117,16 @@ class CheckConstraint(BaseConstraint):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "<%s: check=%s name=%s>" % (
|
return "<%s: check=%s name=%s%s>" % (
|
||||||
self.__class__.__qualname__,
|
self.__class__.__qualname__,
|
||||||
self.check,
|
self.check,
|
||||||
repr(self.name),
|
repr(self.name),
|
||||||
|
(
|
||||||
|
""
|
||||||
|
if self.violation_error_message is None
|
||||||
|
or self.violation_error_message == self.default_violation_error_message
|
||||||
|
else " violation_error_message=%r" % self.violation_error_message
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
def __eq__(self, other):
|
def __eq__(self, other):
|
||||||
@ -287,7 +293,7 @@ class UniqueConstraint(BaseConstraint):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "<%s:%s%s%s%s%s%s%s>" % (
|
return "<%s:%s%s%s%s%s%s%s%s>" % (
|
||||||
self.__class__.__qualname__,
|
self.__class__.__qualname__,
|
||||||
"" if not self.fields else " fields=%s" % repr(self.fields),
|
"" if not self.fields else " fields=%s" % repr(self.fields),
|
||||||
"" if not self.expressions else " expressions=%s" % repr(self.expressions),
|
"" if not self.expressions else " expressions=%s" % repr(self.expressions),
|
||||||
@ -296,6 +302,12 @@ class UniqueConstraint(BaseConstraint):
|
|||||||
"" if self.deferrable is None else " deferrable=%r" % self.deferrable,
|
"" if self.deferrable is None else " deferrable=%r" % self.deferrable,
|
||||||
"" if not self.include else " include=%s" % repr(self.include),
|
"" if not self.include else " include=%s" % repr(self.include),
|
||||||
"" if not self.opclasses else " opclasses=%s" % repr(self.opclasses),
|
"" if not self.opclasses else " opclasses=%s" % repr(self.opclasses),
|
||||||
|
(
|
||||||
|
""
|
||||||
|
if self.violation_error_message is None
|
||||||
|
or self.violation_error_message == self.default_violation_error_message
|
||||||
|
else " violation_error_message=%r" % self.violation_error_message
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
def __eq__(self, other):
|
def __eq__(self, other):
|
||||||
|
@ -160,6 +160,18 @@ class CheckConstraintTests(TestCase):
|
|||||||
"name='price_gt_discounted_price'>",
|
"name='price_gt_discounted_price'>",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_repr_with_violation_error_message(self):
|
||||||
|
constraint = models.CheckConstraint(
|
||||||
|
check=models.Q(price__lt=1),
|
||||||
|
name="price_lt_one",
|
||||||
|
violation_error_message="More than 1",
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
repr(constraint),
|
||||||
|
"<CheckConstraint: check=(AND: ('price__lt', 1)) name='price_lt_one' "
|
||||||
|
"violation_error_message='More than 1'>",
|
||||||
|
)
|
||||||
|
|
||||||
def test_invalid_check_types(self):
|
def test_invalid_check_types(self):
|
||||||
msg = "CheckConstraint.check must be a Q instance or boolean expression."
|
msg = "CheckConstraint.check must be a Q instance or boolean expression."
|
||||||
with self.assertRaisesMessage(TypeError, msg):
|
with self.assertRaisesMessage(TypeError, msg):
|
||||||
@ -486,6 +498,20 @@ class UniqueConstraintTests(TestCase):
|
|||||||
"name='book_func_uq'>",
|
"name='book_func_uq'>",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_repr_with_violation_error_message(self):
|
||||||
|
constraint = models.UniqueConstraint(
|
||||||
|
models.F("baz__lower"),
|
||||||
|
name="unique_lower_baz",
|
||||||
|
violation_error_message="BAZ",
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
repr(constraint),
|
||||||
|
(
|
||||||
|
"<UniqueConstraint: expressions=(F(baz__lower),) "
|
||||||
|
"name='unique_lower_baz' violation_error_message='BAZ'>"
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
def test_deconstruction(self):
|
def test_deconstruction(self):
|
||||||
fields = ["foo", "bar"]
|
fields = ["foo", "bar"]
|
||||||
name = "unique_fields"
|
name = "unique_fields"
|
||||||
|
@ -386,6 +386,17 @@ class ExclusionConstraintTests(PostgreSQLTestCase):
|
|||||||
"(OpClass(F(datespan), name=range_ops), '-|-')] "
|
"(OpClass(F(datespan), name=range_ops), '-|-')] "
|
||||||
"name='exclude_overlapping'>",
|
"name='exclude_overlapping'>",
|
||||||
)
|
)
|
||||||
|
constraint = ExclusionConstraint(
|
||||||
|
name="exclude_overlapping",
|
||||||
|
expressions=[(F("datespan"), RangeOperators.ADJACENT_TO)],
|
||||||
|
violation_error_message="Overlapping must be excluded",
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
repr(constraint),
|
||||||
|
"<ExclusionConstraint: index_type='GIST' expressions=["
|
||||||
|
"(F(datespan), '-|-')] name='exclude_overlapping' "
|
||||||
|
"violation_error_message='Overlapping must be excluded'>",
|
||||||
|
)
|
||||||
|
|
||||||
def test_eq(self):
|
def test_eq(self):
|
||||||
constraint_1 = ExclusionConstraint(
|
constraint_1 = ExclusionConstraint(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user