diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index d5dfac733f..d2493dbee0 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -1894,13 +1894,13 @@ class BigIntegerField(IntegerField): class IPAddressField(Field): empty_strings_allowed = False description = _("IPv4 address") - system_check_deprecated_details = { + system_check_removed_details = { 'msg': ( - 'IPAddressField has been deprecated. Support for it (except in ' - 'historical migrations) will be removed in Django 1.9.' + 'IPAddressField has been removed except for support in ' + 'historical migrations.' ), 'hint': 'Use GenericIPAddressField instead.', - 'id': 'fields.W900', + 'id': 'fields.E900', } def __init__(self, *args, **kwargs): @@ -1921,11 +1921,6 @@ class IPAddressField(Field): def get_internal_type(self): return "IPAddressField" - def formfield(self, **kwargs): - defaults = {'form_class': forms.IPAddressField} - defaults.update(kwargs) - return super(IPAddressField, self).formfield(**defaults) - class GenericIPAddressField(Field): empty_strings_allowed = False diff --git a/django/forms/fields.py b/django/forms/fields.py index ff8d9d826a..4f0ba23052 100644 --- a/django/forms/fields.py +++ b/django/forms/fields.py @@ -27,7 +27,7 @@ from django.utils import formats from django.utils.encoding import smart_text, force_str, force_text from django.utils.ipv6 import clean_ipv6_address from django.utils.dateparse import parse_duration -from django.utils.deprecation import RemovedInDjango19Warning, RemovedInDjango20Warning, RenameMethodsBase +from django.utils.deprecation import RemovedInDjango20Warning, RenameMethodsBase from django.utils.duration import duration_string from django.utils import six from django.utils.six.moves.urllib.parse import urlsplit, urlunsplit @@ -43,7 +43,7 @@ __all__ = ( 'RegexField', 'EmailField', 'FileField', 'ImageField', 'URLField', 'BooleanField', 'NullBooleanField', 'ChoiceField', 'MultipleChoiceField', 'ComboField', 'MultiValueField', 'FloatField', 'DecimalField', - 'SplitDateTimeField', 'IPAddressField', 'GenericIPAddressField', 'FilePathField', + 'SplitDateTimeField', 'GenericIPAddressField', 'FilePathField', 'SlugField', 'TypedChoiceField', 'TypedMultipleChoiceField', 'UUIDField', ) @@ -1206,20 +1206,6 @@ class SplitDateTimeField(MultiValueField): return None -class IPAddressField(CharField): - default_validators = [validators.validate_ipv4_address] - - def __init__(self, *args, **kwargs): - warnings.warn("IPAddressField has been deprecated. Use GenericIPAddressField instead.", - RemovedInDjango19Warning) - super(IPAddressField, self).__init__(*args, **kwargs) - - def to_python(self, value): - if value in self.empty_values: - return '' - return value.strip() - - class GenericIPAddressField(CharField): def __init__(self, protocol='both', unpack_ipv4=False, *args, **kwargs): self.unpack_ipv4 = unpack_ipv4 diff --git a/docs/ref/checks.txt b/docs/ref/checks.txt index b519b0afab..03f280bd2e 100644 --- a/docs/ref/checks.txt +++ b/docs/ref/checks.txt @@ -95,8 +95,11 @@ Fields * **fields.E160**: The options ``auto_now``, ``auto_now_add``, and ``default`` are mutually exclusive. Only one of these options may be present. * **fields.W161**: Fixed default value provided. +* **fields.E900**: ``IPAddressField`` has been removed except for support in + historical migrations. * **fields.W900**: ``IPAddressField`` has been deprecated. Support for it - (except in historical migrations) will be removed in Django 1.9. + (except in historical migrations) will be removed in Django 1.9. *This check + appeared in Django 1.7 and 1.8*. File Fields ~~~~~~~~~~~ diff --git a/docs/ref/forms/fields.txt b/docs/ref/forms/fields.txt index eee3f9f9b8..0a80a3c9f3 100644 --- a/docs/ref/forms/fields.txt +++ b/docs/ref/forms/fields.txt @@ -719,22 +719,6 @@ For each field, we describe the default widget used if you don't specify These control the range of values permitted in the field. -``IPAddressField`` -~~~~~~~~~~~~~~~~~~ - -.. class:: IPAddressField(**kwargs) - - .. deprecated:: 1.7 - This field has been deprecated in favor of - :class:`~django.forms.GenericIPAddressField`. - - * Default widget: :class:`TextInput` - * Empty value: ``''`` (an empty string) - * Normalizes to: A Unicode object. - * Validates that the given value is a valid IPv4 address, using a regular - expression. - * Error message keys: ``required``, ``invalid`` - ``GenericIPAddressField`` ~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/ref/models/fields.txt b/docs/ref/models/fields.txt index 3fd9d0aace..6068fe0f7c 100644 --- a/docs/ref/models/fields.txt +++ b/docs/ref/models/fields.txt @@ -892,18 +892,6 @@ An integer. Values from ``-2147483648`` to ``2147483647`` are safe in all databases supported by Django. The default form widget for this field is a :class:`~django.forms.TextInput`. -``IPAddressField`` ------------------- - -.. class:: IPAddressField([**options]) - -.. deprecated:: 1.7 - This field has been deprecated in favor of - :class:`~django.db.models.GenericIPAddressField`. - -An IP address, in string format (e.g. "192.0.2.30"). The default form widget -for this field is a :class:`~django.forms.TextInput`. - ``GenericIPAddressField`` ------------------------- diff --git a/docs/releases/1.4.11.txt b/docs/releases/1.4.11.txt index 8cfcdbaeed..d6d65f7789 100644 --- a/docs/releases/1.4.11.txt +++ b/docs/releases/1.4.11.txt @@ -96,7 +96,7 @@ field classes did not correctly convert their arguments: * :class:`~django.db.models.FilePathField` * :class:`~django.db.models.GenericIPAddressField` -* :class:`~django.db.models.IPAddressField` +* ``IPAddressField`` These three fields have been updated to convert their arguments to the correct types before querying. diff --git a/docs/releases/1.5.6.txt b/docs/releases/1.5.6.txt index 3bffb1c7ad..7c3cd3a75d 100644 --- a/docs/releases/1.5.6.txt +++ b/docs/releases/1.5.6.txt @@ -95,7 +95,7 @@ field classes did not correctly convert their arguments: * :class:`~django.db.models.FilePathField` * :class:`~django.db.models.GenericIPAddressField` -* :class:`~django.db.models.IPAddressField` +* ``IPAddressField`` These three fields have been updated to convert their arguments to the correct types before querying. diff --git a/docs/releases/1.6.3.txt b/docs/releases/1.6.3.txt index a3eada7cf2..80438acb4b 100644 --- a/docs/releases/1.6.3.txt +++ b/docs/releases/1.6.3.txt @@ -95,7 +95,7 @@ field classes did not correctly convert their arguments: * :class:`~django.db.models.FilePathField` * :class:`~django.db.models.GenericIPAddressField` -* :class:`~django.db.models.IPAddressField` +* ``IPAddressField`` These three fields have been updated to convert their arguments to the correct types before querying. diff --git a/docs/releases/1.6.txt b/docs/releases/1.6.txt index 538394b2a3..01a11d9a96 100644 --- a/docs/releases/1.6.txt +++ b/docs/releases/1.6.txt @@ -876,10 +876,8 @@ Miscellaneous :class:`~django.forms.ModelMultipleChoiceField`. * Some :attr:`~django.forms.Field.error_messages` for - :class:`~django.forms.IntegerField`, - :class:`~django.forms.EmailField`, - :class:`~django.forms.IPAddressField`, - :class:`~django.forms.GenericIPAddressField`, and + :class:`~django.forms.IntegerField`, :class:`~django.forms.EmailField`, + ``IPAddressField``, :class:`~django.forms.GenericIPAddressField`, and :class:`~django.forms.SlugField` have been suppressed because they duplicated error messages already provided by validators tied to the fields. diff --git a/docs/releases/1.7.txt b/docs/releases/1.7.txt index 09b967dfe5..63aa7722b8 100644 --- a/docs/releases/1.7.txt +++ b/docs/releases/1.7.txt @@ -1591,8 +1591,8 @@ better handle the case of selectively showing inlines on a ``ModelAdmin``. ``IPAddressField`` ~~~~~~~~~~~~~~~~~~ -The :class:`django.db.models.IPAddressField` and -:class:`django.forms.IPAddressField` fields have been deprecated in favor of +The ``django.db.models.IPAddressField`` and ``django.forms.IPAddressField`` +fields have been deprecated in favor of :class:`django.db.models.GenericIPAddressField` and :class:`django.forms.GenericIPAddressField`. diff --git a/tests/expressions_case/models.py b/tests/expressions_case/models.py index b1b24e05fa..1a35d544e7 100644 --- a/tests/expressions_case/models.py +++ b/tests/expressions_case/models.py @@ -29,7 +29,6 @@ class CaseTestModel(models.Model): float = models.FloatField(null=True, db_column='float_field') if Image: image = models.ImageField(null=True) - ip_address = models.IPAddressField(null=True) generic_ip_address = models.GenericIPAddressField(null=True) null_boolean = models.NullBooleanField() positive_integer = models.PositiveIntegerField(null=True) diff --git a/tests/expressions_case/tests.py b/tests/expressions_case/tests.py index 9636930e05..0790b7b080 100644 --- a/tests/expressions_case/tests.py +++ b/tests/expressions_case/tests.py @@ -752,21 +752,6 @@ class CaseExpressionTests(TestCase): transform=lambda o: (o.integer, six.text_type(o.image)) ) - def test_update_ip_address(self): - CaseTestModel.objects.update( - ip_address=Case( - # fails on postgresql if output_field is not set explicitly - When(integer=1, then=Value('1.1.1.1')), - When(integer=2, then=Value('2.2.2.2')), - output_field=models.IPAddressField(), - ), - ) - self.assertQuerysetEqual( - CaseTestModel.objects.all().order_by('pk'), - [(1, '1.1.1.1'), (2, '2.2.2.2'), (3, None), (2, '2.2.2.2'), (3, None), (3, None), (4, None)], - transform=attrgetter('integer', 'ip_address') - ) - def test_update_generic_ip_address(self): CaseTestModel.objects.update( generic_ip_address=Case( diff --git a/tests/forms_tests/tests/test_error_messages.py b/tests/forms_tests/tests/test_error_messages.py index 798f11ba1a..5f79d4aa95 100644 --- a/tests/forms_tests/tests/test_error_messages.py +++ b/tests/forms_tests/tests/test_error_messages.py @@ -5,12 +5,11 @@ from django.core.files.uploadedfile import SimpleUploadedFile from django.forms import ( BooleanField, CharField, ChoiceField, DateField, DateTimeField, DecimalField, EmailField, FileField, FloatField, Form, - GenericIPAddressField, IntegerField, IPAddressField, ModelChoiceField, + GenericIPAddressField, IntegerField, ModelChoiceField, ModelMultipleChoiceField, MultipleChoiceField, RegexField, SplitDateTimeField, TimeField, URLField, utils, ValidationError, ) -from django.test import ignore_warnings, TestCase -from django.utils.deprecation import RemovedInDjango19Warning +from django.test import TestCase from django.utils.safestring import mark_safe from django.utils.encoding import python_2_unicode_compatible @@ -197,16 +196,6 @@ class FormsErrorMessagesTestCase(TestCase, AssertFormErrorsMixin): self.assertFormErrors(['REQUIRED'], f.clean, '') self.assertFormErrors(['INVALID DATE', 'INVALID TIME'], f.clean, ['a', 'b']) - @ignore_warnings(category=RemovedInDjango19Warning) - def test_ipaddressfield(self): - e = { - 'required': 'REQUIRED', - 'invalid': 'INVALID IP ADDRESS', - } - f = IPAddressField(error_messages=e) - self.assertFormErrors(['REQUIRED'], f.clean, '') - self.assertFormErrors(['INVALID IP ADDRESS'], f.clean, '127.0.0') - def test_generic_ipaddressfield(self): e = { 'required': 'REQUIRED', diff --git a/tests/forms_tests/tests/test_extra.py b/tests/forms_tests/tests/test_extra.py index d172e17cd9..5599ec6ccf 100644 --- a/tests/forms_tests/tests/test_extra.py +++ b/tests/forms_tests/tests/test_extra.py @@ -5,17 +5,16 @@ import datetime from django.forms import ( CharField, DateField, EmailField, FileField, Form, GenericIPAddressField, - HiddenInput, ImageField, IPAddressField, MultipleChoiceField, - MultiValueField, MultiWidget, PasswordInput, SelectMultiple, SlugField, - SplitDateTimeField, SplitDateTimeWidget, TextInput, URLField, + HiddenInput, ImageField, MultipleChoiceField, MultiValueField, MultiWidget, + PasswordInput, SelectMultiple, SlugField, SplitDateTimeField, + SplitDateTimeWidget, TextInput, URLField, ) from django.forms.extras import SelectDateWidget from django.forms.utils import ErrorList -from django.test import TestCase, ignore_warnings, override_settings +from django.test import TestCase, override_settings from django.utils import six from django.utils import translation from django.utils.dates import MONTHS_AP -from django.utils.deprecation import RemovedInDjango19Warning from django.utils.encoding import force_text, smart_text, python_2_unicode_compatible from .test_error_messages import AssertFormErrorsMixin @@ -483,26 +482,6 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin): self.assertEqual(f.cleaned_data['field1'], 'some text,JP,2007-04-25 06:24:00') - @ignore_warnings(category=RemovedInDjango19Warning) - def test_ipaddress(self): - f = IPAddressField() - self.assertFormErrors(['This field is required.'], f.clean, '') - self.assertFormErrors(['This field is required.'], f.clean, None) - self.assertEqual(f.clean(' 127.0.0.1'), '127.0.0.1') - self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, 'foo') - self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, '127.0.0.') - self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, '1.2.3.4.5') - self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, '256.125.1.5') - - f = IPAddressField(required=False) - self.assertEqual(f.clean(''), '') - self.assertEqual(f.clean(None), '') - self.assertEqual(f.clean(' 127.0.0.1'), '127.0.0.1') - self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, 'foo') - self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, '127.0.0.') - self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, '1.2.3.4.5') - self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, '256.125.1.5') - def test_generic_ipaddress_invalid_arguments(self): self.assertRaises(ValueError, GenericIPAddressField, protocol="hamster") self.assertRaises(ValueError, GenericIPAddressField, protocol="ipv4", unpack_ipv4=True) diff --git a/tests/inspectdb/models.py b/tests/inspectdb/models.py index 9cc0a196a5..5c968c6f9f 100644 --- a/tests/inspectdb/models.py +++ b/tests/inspectdb/models.py @@ -59,7 +59,6 @@ class ColumnTypes(models.Model): file_path_field = models.FilePathField() float_field = models.FloatField() int_field = models.IntegerField() - ip_address_field = models.IPAddressField() gen_ip_adress_field = models.GenericIPAddressField(protocol="ipv4") pos_int_field = models.PositiveIntegerField() pos_small_int_field = models.PositiveSmallIntegerField() diff --git a/tests/inspectdb/tests.py b/tests/inspectdb/tests.py index e35fe0bd48..70538b1bdf 100644 --- a/tests/inspectdb/tests.py +++ b/tests/inspectdb/tests.py @@ -61,11 +61,9 @@ class InspectDBTestCase(TestCase): assertFieldType('file_field', "models.CharField(max_length=100)") assertFieldType('file_path_field', "models.CharField(max_length=100)") if connection.features.can_introspect_ip_address_field: - assertFieldType('ip_address_field', "models.GenericIPAddressField()") assertFieldType('gen_ip_adress_field', "models.GenericIPAddressField()") elif (connection.features.can_introspect_max_length and not connection.features.interprets_empty_strings_as_nulls): - assertFieldType('ip_address_field', "models.CharField(max_length=15)") assertFieldType('gen_ip_adress_field', "models.CharField(max_length=39)") if (connection.features.can_introspect_max_length and not connection.features.interprets_empty_strings_as_nulls): diff --git a/tests/invalid_models_tests/test_deprecated_fields.py b/tests/invalid_models_tests/test_deprecated_fields.py new file mode 100644 index 0000000000..feabe58e37 --- /dev/null +++ b/tests/invalid_models_tests/test_deprecated_fields.py @@ -0,0 +1,22 @@ +from django.core import checks +from django.db import models + +from .base import IsolatedModelsTestCase + + +class DeprecatedFieldssTests(IsolatedModelsTestCase): + def test_IPAddressField_deprecated(self): + class IPAddressModel(models.Model): + ip = models.IPAddressField() + + model = IPAddressModel() + self.assertEqual( + model.check(), + [checks.Error( + 'IPAddressField has been removed except for support in ' + 'historical migrations.', + hint='Use GenericIPAddressField instead.', + obj=IPAddressModel._meta.get_field('ip'), + id='fields.E900', + )], + ) diff --git a/tests/migrations/deprecated_field_migrations/0001_initial.py b/tests/migrations/deprecated_field_migrations/0001_initial.py new file mode 100644 index 0000000000..724f973405 --- /dev/null +++ b/tests/migrations/deprecated_field_migrations/0001_initial.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='IPAddressField', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('ip', models.IPAddressField(null=True, blank=True)), + ], + ), + ] diff --git a/tests/migrations/deprecated_field_migrations/0002_remove_ipaddressfield_ip.py b/tests/migrations/deprecated_field_migrations/0002_remove_ipaddressfield_ip.py new file mode 100644 index 0000000000..12e9739bca --- /dev/null +++ b/tests/migrations/deprecated_field_migrations/0002_remove_ipaddressfield_ip.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('migrations', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='ipaddressfield', + name='ip', + ), + ] diff --git a/tests/migrations/deprecated_field_migrations/__init__.py b/tests/migrations/deprecated_field_migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/migrations/test_deprecated_fields.py b/tests/migrations/test_deprecated_fields.py new file mode 100644 index 0000000000..2e9808e20b --- /dev/null +++ b/tests/migrations/test_deprecated_fields.py @@ -0,0 +1,22 @@ +from django.core.management import call_command +from django.test import override_settings + +from .test_base import MigrationTestBase + + +class Tests(MigrationTestBase): + """ + Deprecated model fields should still be usable in historic migrations. + """ + @override_settings(MIGRATION_MODULES={"migrations": "migrations.deprecated_field_migrations"}) + def test_migrate(self): + # Make sure no tables are created + self.assertTableNotExists("migrations_ipaddressfield") + # Run migration + call_command("migrate", verbosity=0) + # Make sure the right tables exist + self.assertTableExists("migrations_ipaddressfield") + # Unmigrate everything + call_command("migrate", "migrations", "zero", verbosity=0) + # Make sure it's all gone + self.assertTableNotExists("migrations_ipaddressfield") diff --git a/tests/model_fields/models.py b/tests/model_fields/models.py index 2c6b707b88..9a6a3f1f36 100644 --- a/tests/model_fields/models.py +++ b/tests/model_fields/models.py @@ -168,16 +168,15 @@ class VerboseNameField(models.Model): # Don't want to depend on Pillow in this test #field_image = models.ImageField("verbose field") field12 = models.IntegerField("verbose field12") - field13 = models.IPAddressField("verbose field13") - field14 = models.GenericIPAddressField("verbose field14", protocol="ipv4") - field15 = models.NullBooleanField("verbose field15") - field16 = models.PositiveIntegerField("verbose field16") - field17 = models.PositiveSmallIntegerField("verbose field17") - field18 = models.SlugField("verbose field18") - field19 = models.SmallIntegerField("verbose field19") - field20 = models.TextField("verbose field20") - field21 = models.TimeField("verbose field21") - field22 = models.URLField("verbose field22") + field13 = models.GenericIPAddressField("verbose field13", protocol="ipv4") + field14 = models.NullBooleanField("verbose field14") + field15 = models.PositiveIntegerField("verbose field15") + field16 = models.PositiveSmallIntegerField("verbose field16") + field17 = models.SlugField("verbose field17") + field18 = models.SmallIntegerField("verbose field18") + field19 = models.TextField("verbose field19") + field20 = models.TimeField("verbose field20") + field21 = models.URLField("verbose field21") class GenericIPAddress(models.Model): @@ -323,7 +322,6 @@ class AllFieldsModel(models.Model): file_path = models.FilePathField() floatf = models.FloatField() integer = models.IntegerField() - ip_address = models.IPAddressField() generic_ip = models.GenericIPAddressField() null_boolean = models.NullBooleanField() positive_integer = models.PositiveIntegerField() diff --git a/tests/model_fields/tests.py b/tests/model_fields/tests.py index a9ce43cae6..60a1f419ed 100644 --- a/tests/model_fields/tests.py +++ b/tests/model_fields/tests.py @@ -75,7 +75,7 @@ class BasicFieldTests(test.TestCase): def test_field_verbose_name(self): m = VerboseNameField - for i in range(1, 23): + for i in range(1, 22): self.assertEqual(m._meta.get_field('field%d' % i).verbose_name, 'verbose field%d' % i) @@ -819,22 +819,6 @@ class PromiseTest(test.TestCase): IPAddressField().get_prep_value(lazy_func()), six.text_type) - def test_IPAddressField_deprecated(self): - class IPAddressModel(models.Model): - ip = IPAddressField() - - model = IPAddressModel() - self.assertEqual( - model.check(), - [checks.Warning( - 'IPAddressField has been deprecated. Support for it ' - '(except in historical migrations) will be removed in Django 1.9.', - hint='Use GenericIPAddressField instead.', - obj=IPAddressModel._meta.get_field('ip'), - id='fields.W900', - )], - ) - def test_GenericIPAddressField(self): lazy_func = lazy(lambda: '127.0.0.1', six.text_type) self.assertIsInstance( diff --git a/tests/serializers_regress/models.py b/tests/serializers_regress/models.py index 49b84501bf..7c7b9f12b0 100644 --- a/tests/serializers_regress/models.py +++ b/tests/serializers_regress/models.py @@ -65,10 +65,6 @@ class BigIntegerData(models.Model): # data = models.ImageField(null=True) -class IPAddressData(models.Model): - data = models.IPAddressField(null=True) - - class GenericIPAddressData(models.Model): data = models.GenericIPAddressField(null=True) @@ -245,10 +241,6 @@ class IntegerPKData(models.Model): # data = models.ImageField(primary_key=True) -class IPAddressPKData(models.Model): - data = models.IPAddressField(primary_key=True) - - class GenericIPAddressPKData(models.Model): data = models.GenericIPAddressField(primary_key=True) diff --git a/tests/serializers_regress/tests.py b/tests/serializers_regress/tests.py index 375a6a30ac..e91a1094ee 100644 --- a/tests/serializers_regress/tests.py +++ b/tests/serializers_regress/tests.py @@ -28,13 +28,13 @@ from django.utils import six from django.utils.functional import curry from .models import (BinaryData, BooleanData, CharData, DateData, DateTimeData, EmailData, - FileData, FilePathData, DecimalData, FloatData, IntegerData, IPAddressData, + FileData, FilePathData, DecimalData, FloatData, IntegerData, GenericIPAddressData, NullBooleanData, PositiveIntegerData, PositiveSmallIntegerData, SlugData, SmallData, TextData, TimeData, GenericData, Anchor, UniqueAnchor, FKData, M2MData, O2OData, FKSelfData, M2MSelfData, FKDataToField, FKDataToO2O, M2MIntermediateData, Intermediate, BooleanPKData, CharPKData, EmailPKData, FilePathPKData, - DecimalPKData, FloatPKData, IntegerPKData, IPAddressPKData, + DecimalPKData, FloatPKData, IntegerPKData, GenericIPAddressPKData, PositiveIntegerPKData, PositiveSmallIntegerPKData, SlugPKData, SmallPKData, AutoNowDateTimeData, ModifyingSaveData, InheritAbstractModel, BaseModel, @@ -241,8 +241,6 @@ test_data = [ (data_obj, 82, IntegerData, 0), (data_obj, 83, IntegerData, None), #(XX, ImageData - (data_obj, 90, IPAddressData, "127.0.0.1"), - (data_obj, 91, IPAddressData, None), (data_obj, 95, GenericIPAddressData, "fe80:1424:2223:6cff:fe8a:2e8a:2151:abcd"), (data_obj, 96, GenericIPAddressData, None), (data_obj, 100, NullBooleanData, True), @@ -341,7 +339,6 @@ The end."""), (pk_obj, 681, IntegerPKData, -123456789), (pk_obj, 682, IntegerPKData, 0), # (XX, ImagePKData - (pk_obj, 690, IPAddressPKData, "127.0.0.1"), (pk_obj, 695, GenericIPAddressPKData, "fe80:1424:2223:6cff:fe8a:2e8a:2151:abcd"), # (pk_obj, 700, NullBooleanPKData, True), # (pk_obj, 701, NullBooleanPKData, False),