summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2020-01-31 01:38:48 -0500
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-02-07 11:03:53 +0100
commit71756bdfed5029bd14dce8cb3c5629efc4be55ac (patch)
tree39c223acc21fc3373882dc5a6f0d1f801543d9e9
parent430e796980799feb75901b9918245b6b0bff3f54 (diff)
Fixed #31055 -- Made constraint checks support databases aware.
-rw-r--r--django/db/models/base.py7
-rw-r--r--tests/invalid_models_tests/test_models.py8
2 files changed, 8 insertions, 7 deletions
diff --git a/django/db/models/base.py b/django/db/models/base.py
index 24453e218a..1d98ff407b 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -1255,6 +1255,7 @@ class Model(metaclass=ModelBase):
def check(cls, **kwargs):
errors = [*cls._check_swappable(), *cls._check_model(), *cls._check_managers(**kwargs)]
if not cls._meta.swapped:
+ databases = kwargs.get('databases') or []
errors += [
*cls._check_fields(**kwargs),
*cls._check_m2m_through_same_relationship(),
@@ -1277,7 +1278,7 @@ class Model(metaclass=ModelBase):
*cls._check_unique_together(),
*cls._check_indexes(),
*cls._check_ordering(),
- *cls._check_constraints(),
+ *cls._check_constraints(databases),
]
return errors
@@ -1836,9 +1837,9 @@ class Model(metaclass=ModelBase):
return errors
@classmethod
- def _check_constraints(cls):
+ def _check_constraints(cls, databases):
errors = []
- for db in settings.DATABASES:
+ for db in databases:
if not router.allow_migrate_model(db, cls):
continue
connection = connections[db]
diff --git a/tests/invalid_models_tests/test_models.py b/tests/invalid_models_tests/test_models.py
index ec2d345d5a..4d2a923a00 100644
--- a/tests/invalid_models_tests/test_models.py
+++ b/tests/invalid_models_tests/test_models.py
@@ -6,7 +6,7 @@ from django.core.checks.model_checks import _check_lazy_references
from django.db import connection, connections, models
from django.db.models.functions import Lower
from django.db.models.signals import post_init
-from django.test import SimpleTestCase
+from django.test import SimpleTestCase, TestCase
from django.test.utils import isolate_apps, override_settings, register_lookup
@@ -1212,7 +1212,7 @@ class OtherModelTests(SimpleTestCase):
@isolate_apps('invalid_models_tests')
-class ConstraintsTests(SimpleTestCase):
+class ConstraintsTests(TestCase):
def test_check_constraints(self):
class Model(models.Model):
age = models.IntegerField()
@@ -1220,7 +1220,7 @@ class ConstraintsTests(SimpleTestCase):
class Meta:
constraints = [models.CheckConstraint(check=models.Q(age__gte=18), name='is_adult')]
- errors = Model.check()
+ errors = Model.check(databases=self.databases)
warn = Warning(
'%s does not support check constraints.' % connection.display_name,
hint=(
@@ -1230,7 +1230,7 @@ class ConstraintsTests(SimpleTestCase):
obj=Model,
id='models.W027',
)
- expected = [] if connection.features.supports_table_check_constraints else [warn, warn]
+ expected = [] if connection.features.supports_table_check_constraints else [warn]
self.assertCountEqual(errors, expected)
def test_check_constraints_required_db_features(self):