From e9d1f1182aaccaa8b60cf6a3491f0103d2bb0229 Mon Sep 17 00:00:00 2001 From: MattBlack85 Date: Tue, 18 Nov 2014 15:03:13 +0100 Subject: [PATCH] Fixed #23801 -- Added warning when max_length is used with IntegerField --- django/db/models/fields/__init__.py | 17 +++++++++++++++++ docs/ref/checks.txt | 1 + .../test_ordinary_fields.py | 19 +++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index 552f868de2..2c3efbb689 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -1704,6 +1704,23 @@ class IntegerField(Field): } description = _("Integer") + def check(self, **kwargs): + errors = super(IntegerField, self).check(**kwargs) + errors.extend(self._check_max_length_warning()) + return errors + + def _check_max_length_warning(self): + if self.max_length is not None: + return [ + checks.Warning( + "'max_length' is ignored when used with IntegerField", + hint="Remove 'max_length' from field", + obj=self, + id='fields.W122', + ) + ] + return [] + @cached_property def validators(self): # These validators can't be added at field initialization time since diff --git a/docs/ref/checks.txt b/docs/ref/checks.txt index f1b34fade4..86b287c0f2 100644 --- a/docs/ref/checks.txt +++ b/docs/ref/checks.txt @@ -82,6 +82,7 @@ Fields * **fields.E110**: ``BooleanField``\s do not accept null values. * **fields.E120**: ``CharField``\s must define a ``max_length`` attribute. * **fields.E121**: ``max_length`` must be a positive integer. +* **fields.W122**: ``max_length`` is ignored when used with ``IntegerField``. * **fields.E130**: ``DecimalField``\s must define a ``decimal_places`` attribute. * **fields.E131**: ``decimal_places`` must be a non-negative integer. * **fields.E132**: ``DecimalField``\s must define a ``max_digits`` attribute. diff --git a/tests/invalid_models_tests/test_ordinary_fields.py b/tests/invalid_models_tests/test_ordinary_fields.py index 90c2026be9..c98d218b09 100644 --- a/tests/invalid_models_tests/test_ordinary_fields.py +++ b/tests/invalid_models_tests/test_ordinary_fields.py @@ -513,6 +513,25 @@ class ImageFieldTests(IsolatedModelsTestCase): self.assertEqual(errors, expected) +class IntegerFieldTests(IsolatedModelsTestCase): + + def test_max_length_warning(self): + class Model(models.Model): + value = models.IntegerField(max_length=2) + + value = Model._meta.get_field('value') + errors = Model.check() + expected = [ + DjangoWarning( + "'max_length' is ignored when used with IntegerField", + hint="Remove 'max_length' from field", + obj=value, + id='fields.W122', + ) + ] + self.assertEqual(errors, expected) + + class TimeFieldTests(IsolatedModelsTestCase): def test_fix_default_value(self):