summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/models/fields/__init__.py11
-rw-r--r--docs/internals/deprecation.txt3
-rw-r--r--docs/ref/checks.txt2
-rw-r--r--docs/ref/models/fields.txt7
-rw-r--r--docs/releases/1.10.txt23
-rw-r--r--tests/invalid_models_tests/test_deprecated_fields.py17
6 files changed, 62 insertions, 1 deletions
diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py
index 7a2dfdbd7d..e5c5ca74df 100644
--- a/django/db/models/fields/__init__.py
+++ b/django/db/models/fields/__init__.py
@@ -1144,6 +1144,17 @@ class CharField(Field):
class CommaSeparatedIntegerField(CharField):
default_validators = [validators.validate_comma_separated_integer_list]
description = _("Comma-separated integers")
+ system_check_deprecated_details = {
+ 'msg': (
+ 'CommaSeparatedIntegerField has been deprecated. Support '
+ 'for it (except in historical migrations) will be removed '
+ 'in Django 2.0.'
+ ),
+ 'hint': (
+ 'Use CharField(validators=[validate_comma_separated_integer_list]) instead.'
+ ),
+ 'id': 'fields.W901',
+ }
def formfield(self, **kwargs):
defaults = {
diff --git a/docs/internals/deprecation.txt b/docs/internals/deprecation.txt
index d5add78423..13d9305658 100644
--- a/docs/internals/deprecation.txt
+++ b/docs/internals/deprecation.txt
@@ -130,6 +130,9 @@ details on these changes.
* The ``django.core.urlresolvers`` module will be removed.
+* The model ``CommaSeparatedIntegerField`` will be removed. A stub field will
+ remain for compatibility with historical migrations.
+
.. _deprecation-removed-in-1.10:
1.10
diff --git a/docs/ref/checks.txt b/docs/ref/checks.txt
index f6c304bf95..de9633402f 100644
--- a/docs/ref/checks.txt
+++ b/docs/ref/checks.txt
@@ -165,6 +165,8 @@ Fields
* **fields.W900**: ``IPAddressField`` has been deprecated. Support for it
(except in historical migrations) will be removed in Django 1.9. *This check
appeared in Django 1.7 and 1.8*.
+* **fields.W901**: ``CommaSeparatedIntegerField`` has been deprecated. Support
+ for it (except in historical migrations) will be removed in Django 2.0.
File Fields
~~~~~~~~~~~
diff --git a/docs/ref/models/fields.txt b/docs/ref/models/fields.txt
index 4b100ad98d..4a1c9eefbb 100644
--- a/docs/ref/models/fields.txt
+++ b/docs/ref/models/fields.txt
@@ -471,12 +471,17 @@ The default form widget for this field is a :class:`~django.forms.TextInput`.
of. Refer to the :ref:`MySQL database notes <mysql-collation>` for
details.
-
``CommaSeparatedIntegerField``
------------------------------
.. class:: CommaSeparatedIntegerField(max_length=None, **options)
+.. deprecated:: 1.9
+
+ This field is deprecated in favor of :class:`~django.db.models.CharField`
+ with ``validators=[``\ :func:`validate_comma_separated_integer_list
+ <django.core.validators.validate_comma_separated_integer_list>`\ ``]``.
+
A field of integers separated by commas. As in :class:`CharField`, the
:attr:`~CharField.max_length` argument is required and the note about database
portability mentioned there should be heeded.
diff --git a/docs/releases/1.10.txt b/docs/releases/1.10.txt
index fd2b1a5d40..adebc46e66 100644
--- a/docs/releases/1.10.txt
+++ b/docs/releases/1.10.txt
@@ -561,6 +561,29 @@ This prevents confusion about an assignment resulting in an implicit save.
:class:`~django.contrib.gis.geos.MultiPolygon` is deprecated in favor of the
:attr:`~django.contrib.gis.geos.GEOSGeometry.unary_union` property.
+``CommaSeparatedIntegerField`` model field
+------------------------------------------
+
+``CommaSeparatedIntegerField`` is deprecated in favor of
+:class:`~django.db.models.CharField` with the
+:func:`~django.core.validators.validate_comma_separated_integer_list`
+validator::
+
+ from django.core.validators import validate_comma_separated_integer_list
+ from django.db import models
+
+ class MyModel(models.Model):
+ numbers = models.CharField(..., validators=[validate_comma_separated_integer_list])
+
+If you're using Oracle, ``CharField`` uses a different database field type
+(``NVARCHAR2``) than ``CommaSeparatedIntegerField`` (``VARCHAR2``). Depending
+on your database settings, this might imply a different encoding, and thus a
+different length (in bytes) for the same contents. If your stored values are
+longer than the 4000 byte limit of ``NVARCHAR2``, you should use ``TextField``
+(``NCLOB``) instead. In this case, if you have any queries that group by the
+field (e.g. annotating the model with an aggregation or using ``distinct()``)
+you'll need to change them (to defer the field).
+
Miscellaneous
-------------
diff --git a/tests/invalid_models_tests/test_deprecated_fields.py b/tests/invalid_models_tests/test_deprecated_fields.py
index 7826596895..aca58cb607 100644
--- a/tests/invalid_models_tests/test_deprecated_fields.py
+++ b/tests/invalid_models_tests/test_deprecated_fields.py
@@ -21,3 +21,20 @@ class DeprecatedFieldsTests(SimpleTestCase):
id='fields.E900',
)],
)
+
+ def test_CommaSeparatedIntegerField_deprecated(self):
+ class CommaSeparatedIntegerModel(models.Model):
+ csi = models.CommaSeparatedIntegerField(max_length=64)
+
+ model = CommaSeparatedIntegerModel()
+ self.assertEqual(
+ model.check(),
+ [checks.Warning(
+ 'CommaSeparatedIntegerField has been deprecated. Support '
+ 'for it (except in historical migrations) will be removed '
+ 'in Django 2.0.',
+ hint='Use CharField(validators=[validate_comma_separated_integer_list]) instead.',
+ obj=CommaSeparatedIntegerModel._meta.get_field('csi'),
+ id='fields.W901',
+ )],
+ )