1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Fixes #8102: Raise validation error when attempting to assign an IP address to multiple objects

This commit is contained in:
jeremystretch
2021-12-20 13:07:05 -05:00
parent 82932ae7a5
commit f95e510060
2 changed files with 10 additions and 21 deletions

View File

@ -461,27 +461,16 @@ class IPAddressForm(TenancyForm, CustomFieldModelForm):
def clean(self):
super().clean()
if self.cleaned_data['interface'] and self.cleaned_data['vminterface'] and self.cleaned_data['fhrpgroup']:
self.add_error('interface', "Can only assign an interface, VM interface or FHRP group")
self.add_error('vminterface', "Can only assign an interface, VM interface or FHRP group")
self.add_error('fhrpgroup', "Can only assign an interface, VM interface or FHRP group")
elif self.cleaned_data['interface'] and self.cleaned_data['vminterface']:
self.add_error('interface', "Can only assign an interface or VM interface")
self.add_error('vminterface', "Can only assign an interface or VM interface")
elif self.cleaned_data['interface'] and self.cleaned_data['fhrpgroup']:
self.add_error('interface', "Can only assign an interface or FHRP group")
self.add_error('fhrpgroup', "Can only assign an interface or FHRP group")
elif self.cleaned_data['vminterface'] and self.cleaned_data['fhrpgroup']:
self.add_error('vminterface', "Can only assign an VM interface or FHRP group")
self.add_error('fhrpgroup', "Can only assign an VM interface or FHRP group")
# Handle object assignment
if self.cleaned_data['interface']:
self.instance.assigned_object = self.cleaned_data['interface']
elif self.cleaned_data['vminterface']:
self.instance.assigned_object = self.cleaned_data['vminterface']
elif self.cleaned_data['fhrpgroup']:
self.instance.assigned_object = self.cleaned_data['fhrpgroup']
selected_objects = [
field for field in ('interface', 'vminterface', 'fhrpgroup') if self.cleaned_data[field]
]
if len(selected_objects) > 1:
raise forms.ValidationError({
selected_objects[1]: "An IP address can only be assigned to a single object."
})
elif selected_objects:
self.instance.assigned_object = self.cleaned_data[selected_objects[0]]
# Primary IP assignment is only available if an interface has been assigned.
interface = self.cleaned_data.get('interface') or self.cleaned_data.get('vminterface')