summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTaoup <mahongtao0x7e0@163.com>2020-02-19 19:14:54 +0800
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-02-24 14:23:46 +0100
commit271fdab8b78af558238df51c64b4d1c8dd0792bb (patch)
tree0f4c0f12b8c60c9860a6a9926c87890c67191fa1
parent94d4bd3a091dd9ac265e14619576b1ee568653b1 (diff)
Fixed #31286 -- Made database specific fields checks databases aware.
Follow up to 0b83c8cc4db95812f1e15ca19d78614e94cf38dd.
-rw-r--r--django/db/models/fields/__init__.py13
-rw-r--r--tests/check_framework/test_multi_db.py4
-rw-r--r--tests/invalid_models_tests/test_backend_specific.py2
-rw-r--r--tests/invalid_models_tests/test_ordinary_fields.py2
4 files changed, 12 insertions, 9 deletions
diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py
index 6bd95f542c..caa03665ea 100644
--- a/django/db/models/fields/__init__.py
+++ b/django/db/models/fields/__init__.py
@@ -335,12 +335,15 @@ class Field(RegisterLookupMixin):
else:
return []
- def _check_backend_specific_checks(self, **kwargs):
+ def _check_backend_specific_checks(self, databases=None, **kwargs):
+ if databases is None:
+ return []
app_label = self.model._meta.app_label
- for db in connections:
- if router.allow_migrate(db, app_label, model_name=self.model._meta.model_name):
- return connections[db].validation.check_field(self, **kwargs)
- return []
+ errors = []
+ for alias in databases:
+ if router.allow_migrate(alias, app_label, model_name=self.model._meta.model_name):
+ errors.extend(connections[alias].validation.check_field(self, **kwargs))
+ return errors
def _check_validators(self):
errors = []
diff --git a/tests/check_framework/test_multi_db.py b/tests/check_framework/test_multi_db.py
index f51d28a215..0697b3b94a 100644
--- a/tests/check_framework/test_multi_db.py
+++ b/tests/check_framework/test_multi_db.py
@@ -27,7 +27,7 @@ class TestMultiDBChecks(SimpleTestCase):
model = Model()
with self._patch_check_field_on('default') as mock_check_field_default:
with self._patch_check_field_on('other') as mock_check_field_other:
- model.check()
+ model.check(databases={'default', 'other'})
self.assertTrue(mock_check_field_default.called)
self.assertFalse(mock_check_field_other.called)
@@ -38,6 +38,6 @@ class TestMultiDBChecks(SimpleTestCase):
model = OtherModel()
with self._patch_check_field_on('other') as mock_check_field_other:
with self._patch_check_field_on('default') as mock_check_field_default:
- model.check()
+ model.check(databases={'default', 'other'})
self.assertTrue(mock_check_field_other.called)
self.assertFalse(mock_check_field_default.called)
diff --git a/tests/invalid_models_tests/test_backend_specific.py b/tests/invalid_models_tests/test_backend_specific.py
index 70c7d0b05a..236909d50e 100644
--- a/tests/invalid_models_tests/test_backend_specific.py
+++ b/tests/invalid_models_tests/test_backend_specific.py
@@ -25,4 +25,4 @@ class BackendSpecificChecksTests(SimpleTestCase):
field = Model._meta.get_field('field')
with mock.patch.object(connections['default'].validation, 'check_field', return_value=[error]):
- self.assertEqual(field.check(), [error])
+ self.assertEqual(field.check(databases={'default'}), [error])
diff --git a/tests/invalid_models_tests/test_ordinary_fields.py b/tests/invalid_models_tests/test_ordinary_fields.py
index ce7a67ca51..c8b7e69634 100644
--- a/tests/invalid_models_tests/test_ordinary_fields.py
+++ b/tests/invalid_models_tests/test_ordinary_fields.py
@@ -758,7 +758,7 @@ class TextFieldTests(TestCase):
value = models.TextField(db_index=True)
field = Model._meta.get_field('value')
field_type = field.db_type(connection)
- self.assertEqual(field.check(), [
+ self.assertEqual(field.check(databases=self.databases), [
DjangoWarning(
'%s does not support a database index on %s columns.'
% (connection.display_name, field_type),