Opened 11 years ago
Closed 10 years ago
#24708 closed Bug (fixed)
forms.GenericIPAddressField.to_python behaves differently to other CharField subclasses.
| Reported by: | Keryn Knight | Owned by: | Pradeek |
|---|---|---|---|
| Component: | Forms | Version: | dev |
| Severity: | Normal | Keywords: | |
| Cc: | django@… | Triage Stage: | Ready for checkin |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | yes | UI/UX: | no |
Description
Other forms.fields.CharField subclasses (UUIDField, URLField), when they replace the to_python method, call super(..., self).to_python(...) before acting on the value.
GenericIPAddressField however, does not, which means it calls .strip() on the input, assuming the input is a string.
Thus, the following fails:
>>> GenericIPAddressField().to_python(1) AttributeError: 'int' object has no attribute 'strip'
where the other aforementioned subclasses succeed in their functionality:
>>> URLField().to_python(1) 'http://1' >>> UUIDField().to_python(1) ValidationError: ['Enter a valid UUID.']
Because the call to super(...) ensures either '' or smart_text(...) is returned.
I think the fix is thus:
def to_python(self, value):
value = super(GenericIPAddressField, self).to_python(value).strip() # this is the fix line.
if value in self.empty_values:
return ''
if value and ':' in value:
return clean_ipv6_address(value, self.unpack_ipv4)
return value
Change History (7)
comment:1 by , 11 years ago
| Easy pickings: | set |
|---|---|
| Triage Stage: | Unreviewed → Accepted |
comment:2 by , 11 years ago
| Owner: | changed from to |
|---|---|
| Status: | new → assigned |
comment:3 by , 11 years ago
| Has patch: | set |
|---|---|
| Patch needs improvement: | set |
comment:4 by , 11 years ago
| Owner: | removed |
|---|---|
| Status: | assigned → new |
comment:5 by , 11 years ago
| Owner: | set to |
|---|---|
| Status: | new → assigned |
comment:6 by , 10 years ago
| Patch needs improvement: | unset |
|---|---|
| Triage Stage: | Accepted → Ready for checkin |
PR