diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index 65e5d0bbf..efd1860e3 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -1324,11 +1324,24 @@ class InterfaceCreateForm(DeviceComponentForm): class InterfaceBulkEditForm(BootstrapMixin, BulkEditForm): pk = forms.ModelMultipleChoiceField(queryset=Interface.objects.all(), widget=forms.MultipleHiddenInput) + device = forms.ModelChoiceField(queryset=Device.objects.all(), widget=forms.HiddenInput) + lag = forms.ModelChoiceField(queryset=Interface.objects.all(), required=False, label='Parent LAG') form_factor = forms.ChoiceField(choices=add_blank_choice(IFACE_FF_CHOICES), required=False) description = forms.CharField(max_length=100, required=False) class Meta: - nullable_fields = ['description'] + nullable_fields = ['lag', 'description'] + + def __init__(self, *args, **kwargs): + super(InterfaceBulkEditForm, self).__init__(*args, **kwargs) + + # Limit LAG choices to interfaces which belong to the parent device. + if self.initial.get('device'): + self.fields['lag'].queryset = Interface.objects.filter( + device=self.initial['device'], form_factor=IFACE_FF_LAG + ) + else: + self.fields['lag'].choices = [] # diff --git a/netbox/templates/dcim/device.html b/netbox/templates/dcim/device.html index 653575f2b..99e06177b 100644 --- a/netbox/templates/dcim/device.html +++ b/netbox/templates/dcim/device.html @@ -396,6 +396,7 @@ {% if perms.dcim.delete_interface %}
{% csrf_token %} + {% endif %}
diff --git a/netbox/utilities/views.py b/netbox/utilities/views.py index 3fa09b829..4d6ec3332 100644 --- a/netbox/utilities/views.py +++ b/netbox/utilities/views.py @@ -471,7 +471,9 @@ class BulkEditView(View): return redirect(return_url) else: - form = self.form(self.cls, initial={'pk': pk_list}) + initial_data = request.POST.copy() + initial_data['pk'] = pk_list + form = self.form(self.cls, initial=initial_data) selected_objects = self.cls.objects.filter(pk__in=pk_list) if not selected_objects: