summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMattBlack85 <promat85@gmail.com>2014-11-18 15:03:13 +0100
committerTim Graham <timograham@gmail.com>2014-11-26 18:41:54 -0500
commite9d1f1182aaccaa8b60cf6a3491f0103d2bb0229 (patch)
tree0271253f82ce9c1df9a77c43eb4d79bf4135f312
parentcbb5cdd155668ba771cad6b975676d3b20fed37b (diff)
Fixed #23801 -- Added warning when max_length is used with IntegerField
-rw-r--r--django/db/models/fields/__init__.py17
-rw-r--r--docs/ref/checks.txt1
-rw-r--r--tests/invalid_models_tests/test_ordinary_fields.py19
3 files changed, 37 insertions, 0 deletions
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):