Kaynağa Gözat

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

jeremystretch 4 yıl önce
ebeveyn
işleme
f95e510060
2 değiştirilmiş dosya ile 10 ekleme ve 21 silme
  1. 1 1
      docs/release-notes/version-3.1.md
  2. 9 20
      netbox/ipam/forms/models.py

+ 1 - 1
docs/release-notes/version-3.1.md

@@ -22,7 +22,7 @@
 * [#8088](https://github.com/netbox-community/netbox/issues/8088) - Improve legibility of text in labels with light-colored backgrounds
 * [#8092](https://github.com/netbox-community/netbox/issues/8092) - Rack elevations should not include device asset tags
 * [#8096](https://github.com/netbox-community/netbox/issues/8096) - Fix DataError during change logging of objects with very long string representations
-* [#8102](https://github.com/netbox-community/netbox/issues/8102) - Cause validation error when editing IPAddress when more than one object is selected for assignment 
+* [#8102](https://github.com/netbox-community/netbox/issues/8102) - Raise validation error when attempting to assign an IP address to multiple objects
 
 ---
 

+ 9 - 20
netbox/ipam/forms/models.py

@@ -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')