From a452dddb253ff4fdd793351dac73eeef4d86b83e Mon Sep 17 00:00:00 2001 From: Adam Chainz Date: Sun, 5 Mar 2017 16:50:33 +0000 Subject: Fixed #27904 -- Added a system check that Field.validators are callable. --- tests/invalid_models_tests/test_ordinary_fields.py | 17 +++++++++++++++++ tests/invalid_models_tests/test_relative_fields.py | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/invalid_models_tests/test_ordinary_fields.py b/tests/invalid_models_tests/test_ordinary_fields.py index f1f1f07766..9b5b57834d 100644 --- a/tests/invalid_models_tests/test_ordinary_fields.py +++ b/tests/invalid_models_tests/test_ordinary_fields.py @@ -205,6 +205,23 @@ class CharFieldTests(TestCase): ] self.assertEqual(errors, expected) + def test_bad_validators(self): + class Model(models.Model): + field = models.CharField(max_length=10, validators=[True]) + + field = Model._meta.get_field('field') + self.assertEqual(field.check(), [ + Error( + "All 'validators' must be callable.", + hint=( + "validators[0] (True) isn't a function or instance of a " + "validator class." + ), + obj=field, + id='fields.E008', + ), + ]) + @unittest.skipUnless(connection.vendor == 'mysql', "Test valid only for MySQL") def test_too_long_char_field_under_mysql(self): diff --git a/tests/invalid_models_tests/test_relative_fields.py b/tests/invalid_models_tests/test_relative_fields.py index db677bd670..023e201a8a 100644 --- a/tests/invalid_models_tests/test_relative_fields.py +++ b/tests/invalid_models_tests/test_relative_fields.py @@ -102,7 +102,7 @@ class RelativeFieldTests(SimpleTestCase): m2m = models.ManyToManyField( Model, null=True, - validators=[''], + validators=[lambda x: x], limit_choices_to={'name': 'test_name'}, through='ThroughModel', through_fields=('modelm2m', 'model'), -- cgit v1.3