[1.6.x] Fixed #20740 -- GenericIPAddressField should pass protocol to formfield()

Thanks Jeff250.

Backport of f2cb94f1c0 from master
This commit is contained in:
Tim Graham 2013-07-12 16:05:14 -04:00
parent b30a872973
commit 45fab74561
2 changed files with 17 additions and 1 deletions

View File

@ -1160,7 +1160,10 @@ class GenericIPAddressField(Field):
return value return value
def formfield(self, **kwargs): def formfield(self, **kwargs):
defaults = {'form_class': forms.GenericIPAddressField} defaults = {
'protocol': self.protocol,
'form_class': forms.GenericIPAddressField,
}
defaults.update(kwargs) defaults.update(kwargs)
return super(GenericIPAddressField, self).formfield(**defaults) return super(GenericIPAddressField, self).formfield(**defaults)

View File

@ -468,3 +468,16 @@ class BinaryFieldTests(test.TestCase):
def test_max_length(self): def test_max_length(self):
dm = DataModel(short_data=self.binary_data*4) dm = DataModel(short_data=self.binary_data*4)
self.assertRaises(ValidationError, dm.full_clean) self.assertRaises(ValidationError, dm.full_clean)
class GenericIPAddressFieldTests(test.TestCase):
def test_genericipaddressfield_formfield_protocol(self):
"""
Test that GenericIPAddressField with a specified protocol does not
generate a formfield with no specified protocol. See #20740.
"""
model_field = models.GenericIPAddressField(protocol='IPv4')
form_field = model_field.formfield()
self.assertRaises(ValidationError, form_field.clean, '::1')
model_field = models.GenericIPAddressField(protocol='IPv6')
form_field = model_field.formfield()
self.assertRaises(ValidationError, form_field.clean, '127.0.0.1')