mirror of https://github.com/django/django.git
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)
|
||||
|
||||
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__,
|
||||
repr(self.index_type),
|
||||
repr(self.expressions),
|
||||
|
@ -162,6 +162,12 @@ class ExclusionConstraint(BaseConstraint):
|
|||
"" if self.condition is None else " condition=%s" % self.condition,
|
||||
"" if self.deferrable is None else " deferrable=%r" % self.deferrable,
|
||||
"" 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):
|
||||
|
|
|
@ -117,10 +117,16 @@ class CheckConstraint(BaseConstraint):
|
|||
pass
|
||||
|
||||
def __repr__(self):
|
||||
return "<%s: check=%s name=%s>" % (
|
||||
return "<%s: check=%s name=%s%s>" % (
|
||||
self.__class__.__qualname__,
|
||||
self.check,
|
||||
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):
|
||||
|
@ -287,7 +293,7 @@ class UniqueConstraint(BaseConstraint):
|
|||
)
|
||||
|
||||
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__,
|
||||
"" if not self.fields else " fields=%s" % repr(self.fields),
|
||||
"" 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 not self.include else " include=%s" % repr(self.include),
|
||||
"" 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):
|
||||
|
|
|
@ -160,6 +160,18 @@ class CheckConstraintTests(TestCase):
|
|||
"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):
|
||||
msg = "CheckConstraint.check must be a Q instance or boolean expression."
|
||||
with self.assertRaisesMessage(TypeError, msg):
|
||||
|
@ -486,6 +498,20 @@ class UniqueConstraintTests(TestCase):
|
|||
"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):
|
||||
fields = ["foo", "bar"]
|
||||
name = "unique_fields"
|
||||
|
|
|
@ -386,6 +386,17 @@ class ExclusionConstraintTests(PostgreSQLTestCase):
|
|||
"(OpClass(F(datespan), name=range_ops), '-|-')] "
|
||||
"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):
|
||||
constraint_1 = ExclusionConstraint(
|
||||
|
|
Loading…
Reference in New Issue