Browse Source

Fixes #1926: Prevent reassignment of parent device when bulk editing VC member interfaces

Jeremy Stretch 7 years ago
parent
commit
078404fb59
4 changed files with 6 additions and 16 deletions
  1. 1 12
      netbox/dcim/forms.py
  2. 3 1
      netbox/utilities/forms.py
  3. 2 2
      netbox/utilities/views.py
  4. 0 1
      netbox/virtualization/forms.py

+ 1 - 12
netbox/dcim/forms.py

@@ -1883,7 +1883,6 @@ class InterfaceCreateForm(ComponentForm, ChainedFieldsMixin):
 
 class InterfaceBulkEditForm(BootstrapMixin, BulkEditForm, ChainedFieldsMixin):
     pk = forms.ModelMultipleChoiceField(queryset=Interface.objects.all(), widget=forms.MultipleHiddenInput)
-    device = forms.ModelChoiceField(queryset=Device.objects.all(), widget=forms.HiddenInput)
     form_factor = forms.ChoiceField(choices=add_blank_choice(IFACE_FF_CHOICES), required=False)
     enabled = forms.NullBooleanField(required=False, widget=BulkEditNullBooleanSelect)
     lag = forms.ModelChoiceField(queryset=Interface.objects.all(), required=False, label='Parent LAG')
@@ -1943,17 +1942,7 @@ class InterfaceBulkEditForm(BootstrapMixin, BulkEditForm, ChainedFieldsMixin):
         super(InterfaceBulkEditForm, self).__init__(*args, **kwargs)
 
         # Limit LAG choices to interfaces which belong to the parent device (or VC master)
-        device = None
-        if self.initial.get('device'):
-            try:
-                device = Device.objects.get(pk=self.initial.get('device'))
-            except Device.DoesNotExist:
-                pass
-        else:
-            try:
-                device = Device.objects.get(pk=self.data.get('device'))
-            except Device.DoesNotExist:
-                pass
+        device = self.parent_obj
         if device is not None:
             interface_ordering = device.device_type.interface_ordering
             self.fields['lag'].queryset = Interface.objects.order_naturally(method=interface_ordering).filter(

+ 3 - 1
netbox/utilities/forms.py

@@ -539,9 +539,11 @@ class ComponentForm(BootstrapMixin, forms.Form):
 
 class BulkEditForm(forms.Form):
 
-    def __init__(self, model, *args, **kwargs):
+    def __init__(self, model, parent_obj=None, *args, **kwargs):
         super(BulkEditForm, self).__init__(*args, **kwargs)
         self.model = model
+        self.parent_obj = parent_obj
+
         # Copy any nullable fields defined in Meta
         if hasattr(self.Meta, 'nullable_fields'):
             self.nullable_fields = [field for field in self.Meta.nullable_fields]

+ 2 - 2
netbox/utilities/views.py

@@ -507,7 +507,7 @@ class BulkEditView(View):
             pk_list = [int(pk) for pk in request.POST.getlist('pk')]
 
         if '_apply' in request.POST:
-            form = self.form(self.cls, request.POST)
+            form = self.form(self.cls, parent_obj, request.POST)
             if form.is_valid():
 
                 custom_fields = form.custom_fields if hasattr(form, 'custom_fields') else []
@@ -565,7 +565,7 @@ class BulkEditView(View):
         else:
             initial_data = request.POST.copy()
             initial_data['pk'] = pk_list
-            form = self.form(self.cls, initial=initial_data)
+            form = self.form(self.cls, parent_obj, initial=initial_data)
 
         # Retrieve objects being edited
         queryset = self.queryset or self.cls.objects.all()

+ 0 - 1
netbox/virtualization/forms.py

@@ -442,7 +442,6 @@ class InterfaceCreateForm(ComponentForm):
 
 class InterfaceBulkEditForm(BootstrapMixin, BulkEditForm):
     pk = forms.ModelMultipleChoiceField(queryset=Interface.objects.all(), widget=forms.MultipleHiddenInput)
-    virtual_machine = forms.ModelChoiceField(queryset=VirtualMachine.objects.all(), widget=forms.HiddenInput)
     enabled = forms.NullBooleanField(required=False, widget=BulkEditNullBooleanSelect)
     mtu = forms.IntegerField(required=False, min_value=1, max_value=32767, label='MTU')
     description = forms.CharField(max_length=100, required=False)