netbox/netbox/ipam/formfields.py

31 lines
818 B
Python

from netaddr import IPNetwork, AddrFormatError
from django import forms
from django.core.exceptions import ValidationError
#
# Form fields
#
class IPFormField(forms.Field):
default_error_messages = {
'invalid': "Enter a valid IPv4 or IPv6 address (with CIDR mask).",
}
def to_python(self, value):
if not value:
return None
if isinstance(value, IPNetwork):
return value
# Ensure that a subnet mask has been specified. This prevents IPs from defaulting to a /32 or /128.
if len(value.split('/')) != 2:
raise ValidationError('CIDR mask (e.g. /24) is required.')
try:
return IPNetwork(value)
except AddrFormatError:
raise ValidationError("Please specify a valid IPv4 or IPv6 address.")