GenericIPAddressField does not pass protocol to formfield()
|Reported by:||Jeffrey Knockel||Owned by:||nobody|
|Has patch:||yes||Needs documentation:||no|
|Needs tests:||yes||Patch needs improvement:||no|
If we have a model containing a GenericIPAddressField specifying a protocol...
class MyModel(models.Model): host = models.GenericIPAddressField(protocol='IPv4') . . .
And a ModelForm wrapping it...
class MyForm(forms.ModelForm): class Meta: model = models.MyModel . . .
Then that form can give a misleading error message after validation. For instance, with the example above, if you input, e.g., "bletch", you get the error message "Enter a valid IPv4 or IPv6 address", even though IPv6 addresses are not allowed. (However, if you input, e.g., "::1", you get the accurate message "Enter a valid IPv4 address".)
It seems like GenericIPAddressField doesn't pass its protocol in its formfield() method, so the GenericIPAddressField form field first uses a more general validation rule than the GenericIPAddressField model field. I'm attaching a patch which fixes this issue in my application.
Change History (8)
comment:1 Changed 3 years ago by
|Component:||Uncategorized → Forms|
|Patch needs improvement:||unset|
|Summary:||GenericIPAddressField gives misleading error in ModelForm → GenericIPAddressField does not pass protocol to formfield()|
|Triage Stage:||Unreviewed → Accepted|
|Type:||Uncategorized → Bug|