mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Refs #33829 -- Added violation_error_message to constraints' __repr__().
This commit is contained in:
		
				
					committed by
					
						 Mariusz Felisiak
						Mariusz Felisiak
					
				
			
			
				
	
			
			
			
						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( | ||||
|   | ||||
		Reference in New Issue
	
	Block a user