diff --git a/netbox/ipam/forms.py b/netbox/ipam/forms.py index 666b2ee81..00374ef36 100644 --- a/netbox/ipam/forms.py +++ b/netbox/ipam/forms.py @@ -182,18 +182,14 @@ class PrefixForm(forms.ModelForm, BootstrapMixin): self.fields['vlan'].choices = [] def clean_prefix(self): - data = self.cleaned_data['prefix'] - try: - prefix = IPNetwork(data) - except: - raise + prefix = self.cleaned_data['prefix'] if prefix.version == 4 and prefix.prefixlen == 32: raise forms.ValidationError("Cannot create host addresses (/32) as prefixes. These should be IPv4 " "addresses instead.") elif prefix.version == 6 and prefix.prefixlen == 128: raise forms.ValidationError("Cannot create host addresses (/128) as prefixes. These should be IPv6 " "addresses instead.") - return data + return prefix class PrefixFromCSVForm(forms.ModelForm): diff --git a/netbox/ipam/models.py b/netbox/ipam/models.py index 7c981a8cb..bd49feef1 100644 --- a/netbox/ipam/models.py +++ b/netbox/ipam/models.py @@ -254,12 +254,13 @@ class Prefix(CreatedUpdatedModel): def clean(self): # Disallow host masks - if self.prefix.version == 4 and self.prefix.prefixlen == 32: - raise ValidationError("Cannot create host addresses (/32) as prefixes. These should be IPv4 addresses " - "instead.") - elif self.prefix.version == 6 and self.prefix.prefixlen == 128: - raise ValidationError("Cannot create host addresses (/128) as prefixes. These should be IPv6 addresses " - "instead.") + if self.prefix: + if self.prefix.version == 4 and self.prefix.prefixlen == 32: + raise ValidationError("Cannot create host addresses (/32) as prefixes. These should be IPv4 addresses " + "instead.") + elif self.prefix.version == 6 and self.prefix.prefixlen == 128: + raise ValidationError("Cannot create host addresses (/128) as prefixes. These should be IPv6 addresses " + "instead.") def save(self, *args, **kwargs): if self.prefix: