فهرست منبع

Fixed #35358, Refs #35234 -- Renamed _check() methods to check() for constraints.

Mariusz Felisiak 1 ماه پیش
والد
کامیت
65c46d6932
5فایلهای تغییر یافته به همراه19 افزوده شده و 14 حذف شده
  1. 1 1
      django/contrib/postgres/constraints.py
  2. 1 1
      django/db/models/base.py
  3. 3 3
      django/db/models/constraints.py
  4. 2 1
      docs/releases/6.0.txt
  5. 12 8
      docs/topics/checks.txt

+ 1 - 1
django/contrib/postgres/constraints.py

@@ -76,7 +76,7 @@ class ExclusionConstraint(BaseConstraint):
             expressions.append(expression)
         return ExpressionList(*expressions).resolve_expression(query)
 
-    def _check(self, model, connection):
+    def check(self, model, connection):
         references = set()
         for expr, _ in self.expressions:
             if isinstance(expr, str):

+ 1 - 1
django/db/models/base.py

@@ -2458,7 +2458,7 @@ class Model(AltersData, metaclass=ModelBase):
                 continue
             connection = connections[db]
             for constraint in cls._meta.constraints:
-                errors.extend(constraint._check(cls, connection))
+                errors.extend(constraint.check(cls, connection))
         return errors
 
 

+ 3 - 3
django/db/models/constraints.py

@@ -66,7 +66,7 @@ class BaseConstraint:
     def get_violation_error_message(self):
         return self.violation_error_message % {"name": self.name}
 
-    def _check(self, model, connection):
+    def check(self, model, connection):
         return []
 
     def _check_references(self, model, references):
@@ -147,7 +147,7 @@ class CheckConstraint(BaseConstraint):
             violation_error_message=violation_error_message,
         )
 
-    def _check(self, model, connection):
+    def check(self, model, connection):
         errors = []
         if not (
             connection.features.supports_table_check_constraints
@@ -332,7 +332,7 @@ class UniqueConstraint(BaseConstraint):
     def contains_expressions(self):
         return bool(self.expressions)
 
-    def _check(self, model, connection):
+    def check(self, model, connection):
         errors = model._check_local_fields({*self.fields, *self.include}, "constraints")
         required_db_features = model._meta.required_db_features
         if self.condition is not None and not (

+ 2 - 1
docs/releases/6.0.txt

@@ -177,7 +177,8 @@ Migrations
 Models
 ~~~~~~
 
-* ...
+* :doc:`Constraints </ref/models/constraints>` now implement a ``check()``
+  method that is already registered with the check framework.
 
 Requests and Responses
 ~~~~~~~~~~~~~~~~~~~~~~

+ 12 - 8
docs/topics/checks.txt

@@ -130,18 +130,18 @@ The code below is equivalent to the code above::
 
 .. _field-checking:
 
-Field, model, manager, template engine, and database checks
------------------------------------------------------------
+Field, constraint, model, manager, template engine, and database checks
+-----------------------------------------------------------------------
 
 In some cases, you won't need to register your check function -- you can
 piggyback on an existing registration.
 
-Fields, models, model managers, template engines, and database backends all
-implement a ``check()`` method that is already registered with the check
-framework. If you want to add extra checks, you can extend the implementation
-on the base class, perform any extra checks you need, and append any messages
-to those generated by the base class. It's recommended that you delegate each
-check to separate methods.
+Fields, constraints, models, model managers, template engines, and database
+backends all implement a ``check()`` method that is already registered with the
+check framework. If you want to add extra checks, you can extend the
+implementation on the base class, perform any extra checks you need, and append
+any messages to those generated by the base class. It's recommended that you
+delegate each check to separate methods.
 
 Consider an example where you are implementing a custom field named
 ``RangedIntegerField``. This field adds ``min`` and ``max`` arguments to the
@@ -195,6 +195,10 @@ the only difference is that the check is a classmethod, not an instance method::
             # ... your own checks ...
             return errors
 
+.. versionchanged:: 6.0
+
+    In older versions, constraints didn't implement a ``check()`` method.
+
 Writing tests
 -------------