From c512912463c11428e572fb409704b351b1b26dfd Mon Sep 17 00:00:00 2001 From: Nick Pope Date: Mon, 11 Dec 2017 15:35:19 +0000 Subject: [PATCH] Refs #23801 -- Made integer field max_length warning show correct field type. --- django/db/models/fields/__init__.py | 2 +- docs/ref/checks.txt | 3 ++- .../test_ordinary_fields.py | 27 ++++++++++++------- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index fb96cc333a..a446de0202 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -1773,7 +1773,7 @@ class IntegerField(Field): if self.max_length is not None: return [ checks.Warning( - "'max_length' is ignored when used with IntegerField", + "'max_length' is ignored when used with %s." % self.__class__.__name__, hint="Remove 'max_length' from field", obj=self, id='fields.W122', diff --git a/docs/ref/checks.txt b/docs/ref/checks.txt index 0173f437d0..acd860065f 100644 --- a/docs/ref/checks.txt +++ b/docs/ref/checks.txt @@ -143,7 +143,8 @@ Model fields appeared before support for null values was added in Django 2.1.* * **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.W122**: ``max_length`` is ignored when used with + ````. * **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 184041c24d..e1c04c2d36 100644 --- a/tests/invalid_models_tests/test_ordinary_fields.py +++ b/tests/invalid_models_tests/test_ordinary_fields.py @@ -617,17 +617,24 @@ class IntegerFieldTests(SimpleTestCase): def test_max_length_warning(self): class Model(models.Model): - value = models.IntegerField(max_length=2) + integer = models.IntegerField(max_length=2) + biginteger = models.BigIntegerField(max_length=2) + smallinteger = models.SmallIntegerField(max_length=2) + positiveinteger = models.PositiveIntegerField(max_length=2) + positivesmallinteger = models.PositiveSmallIntegerField(max_length=2) - field = Model._meta.get_field('value') - self.assertEqual(field.check(), [ - DjangoWarning( - "'max_length' is ignored when used with IntegerField", - hint="Remove 'max_length' from field", - obj=field, - id='fields.W122', - ) - ]) + for field in Model._meta.get_fields(): + if field.auto_created: + continue + with self.subTest(name=field.name): + self.assertEqual(field.check(), [ + DjangoWarning( + "'max_length' is ignored when used with %s." % field.__class__.__name__, + hint="Remove 'max_length' from field", + obj=field, + id='fields.W122', + ) + ]) @isolate_apps('invalid_models_tests')