Fixed #24708 -- Handled non-string values in GenericIPAddressField.to_python()
This commit is contained in:
parent
e7e39d32fd
commit
6123e6134f
|
@ -1963,7 +1963,12 @@ class GenericIPAddressField(Field):
|
||||||
return "GenericIPAddressField"
|
return "GenericIPAddressField"
|
||||||
|
|
||||||
def to_python(self, value):
|
def to_python(self, value):
|
||||||
if value and ':' in value:
|
if value is None:
|
||||||
|
return None
|
||||||
|
if not isinstance(value, six.string_types):
|
||||||
|
value = force_text(value)
|
||||||
|
value = value.strip()
|
||||||
|
if ':' in value:
|
||||||
return clean_ipv6_address(value,
|
return clean_ipv6_address(value,
|
||||||
self.unpack_ipv4, self.error_messages['invalid'])
|
self.unpack_ipv4, self.error_messages['invalid'])
|
||||||
return value
|
return value
|
||||||
|
|
|
@ -3,6 +3,7 @@ from __future__ import unicode_literals
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.core.exceptions import NON_FIELD_ERRORS
|
from django.core.exceptions import NON_FIELD_ERRORS
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
from django.utils.functional import lazy
|
||||||
|
|
||||||
from . import ValidationTestCase
|
from . import ValidationTestCase
|
||||||
from .models import (
|
from .models import (
|
||||||
|
@ -129,6 +130,10 @@ class GenericIPAddressFieldTests(ValidationTestCase):
|
||||||
def test_correct_generic_ip_passes(self):
|
def test_correct_generic_ip_passes(self):
|
||||||
giptm = GenericIPAddressTestModel(generic_ip="1.2.3.4")
|
giptm = GenericIPAddressTestModel(generic_ip="1.2.3.4")
|
||||||
self.assertIsNone(giptm.full_clean())
|
self.assertIsNone(giptm.full_clean())
|
||||||
|
giptm = GenericIPAddressTestModel(generic_ip=" 1.2.3.4 ")
|
||||||
|
self.assertIsNone(giptm.full_clean())
|
||||||
|
giptm = GenericIPAddressTestModel(generic_ip="1.2.3.4\n")
|
||||||
|
self.assertIsNone(giptm.full_clean())
|
||||||
giptm = GenericIPAddressTestModel(generic_ip="2001::2")
|
giptm = GenericIPAddressTestModel(generic_ip="2001::2")
|
||||||
self.assertIsNone(giptm.full_clean())
|
self.assertIsNone(giptm.full_clean())
|
||||||
|
|
||||||
|
@ -137,6 +142,10 @@ class GenericIPAddressFieldTests(ValidationTestCase):
|
||||||
self.assertFailsValidation(giptm.full_clean, ['generic_ip'])
|
self.assertFailsValidation(giptm.full_clean, ['generic_ip'])
|
||||||
giptm = GenericIPAddressTestModel(generic_ip="1:2")
|
giptm = GenericIPAddressTestModel(generic_ip="1:2")
|
||||||
self.assertFailsValidation(giptm.full_clean, ['generic_ip'])
|
self.assertFailsValidation(giptm.full_clean, ['generic_ip'])
|
||||||
|
giptm = GenericIPAddressTestModel(generic_ip=1)
|
||||||
|
self.assertFailsValidation(giptm.full_clean, ['generic_ip'])
|
||||||
|
giptm = GenericIPAddressTestModel(generic_ip=lazy(lambda: 1, int))
|
||||||
|
self.assertFailsValidation(giptm.full_clean, ['generic_ip'])
|
||||||
|
|
||||||
def test_correct_v4_ip_passes(self):
|
def test_correct_v4_ip_passes(self):
|
||||||
giptm = GenericIPAddressTestModel(v4_ip="1.2.3.4")
|
giptm = GenericIPAddressTestModel(v4_ip="1.2.3.4")
|
||||||
|
|
Loading…
Reference in New Issue