Explorar el Código

Closes #9003: Enable bulk module assignment/removal for device components

jeremystretch hace 3 años
padre
commit
7fff1e6fe5
Se han modificado 1 ficheros con 47 adiciones y 34 borrados
  1. 47 34
      netbox/dcim/forms/bulk_edit.py

+ 47 - 34
netbox/dcim/forms/bulk_edit.py

@@ -912,9 +912,33 @@ class InventoryItemTemplateBulkEditForm(BulkEditForm):
 # Device components
 #
 
+class ComponentBulkEditForm(NetBoxModelBulkEditForm):
+    device = forms.ModelChoiceField(
+        queryset=Device.objects.all(),
+        required=False,
+        disabled=True,
+        widget=forms.HiddenInput()
+    )
+    module = forms.ModelChoiceField(
+        queryset=Module.objects.all(),
+        required=False
+    )
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+
+        # Limit module queryset to Modules which belong to the parent Device
+        if 'device' in self.initial:
+            device = Device.objects.filter(pk=self.initial['device']).first()
+            self.fields['module'].queryset = Module.objects.filter(device=device)
+        else:
+            self.fields['module'].choices = ()
+            self.fields['module'].widget.attrs['disabled'] = True
+
+
 class ConsolePortBulkEditForm(
     form_from_model(ConsolePort, ['label', 'type', 'speed', 'mark_connected', 'description']),
-    NetBoxModelBulkEditForm
+    ComponentBulkEditForm
 ):
     mark_connected = forms.NullBooleanField(
         required=False,
@@ -923,14 +947,14 @@ class ConsolePortBulkEditForm(
 
     model = ConsolePort
     fieldsets = (
-        (None, ('type', 'label', 'speed', 'description', 'mark_connected')),
+        (None, ('module', 'type', 'label', 'speed', 'description', 'mark_connected')),
     )
-    nullable_fields = ('label', 'description')
+    nullable_fields = ('module', 'label', 'description')
 
 
 class ConsoleServerPortBulkEditForm(
     form_from_model(ConsoleServerPort, ['label', 'type', 'speed', 'mark_connected', 'description']),
-    NetBoxModelBulkEditForm
+    ComponentBulkEditForm
 ):
     mark_connected = forms.NullBooleanField(
         required=False,
@@ -939,14 +963,14 @@ class ConsoleServerPortBulkEditForm(
 
     model = ConsoleServerPort
     fieldsets = (
-        (None, ('type', 'label', 'speed', 'description', 'mark_connected')),
+        (None, ('module', 'type', 'label', 'speed', 'description', 'mark_connected')),
     )
-    nullable_fields = ('label', 'description')
+    nullable_fields = ('module', 'label', 'description')
 
 
 class PowerPortBulkEditForm(
     form_from_model(PowerPort, ['label', 'type', 'maximum_draw', 'allocated_draw', 'mark_connected', 'description']),
-    NetBoxModelBulkEditForm
+    ComponentBulkEditForm
 ):
     mark_connected = forms.NullBooleanField(
         required=False,
@@ -955,22 +979,16 @@ class PowerPortBulkEditForm(
 
     model = PowerPort
     fieldsets = (
-        (None, ('type', 'label', 'description', 'mark_connected')),
+        (None, ('module', 'type', 'label', 'description', 'mark_connected')),
         ('Power', ('maximum_draw', 'allocated_draw')),
     )
-    nullable_fields = ('label', 'description')
+    nullable_fields = ('module', 'label', 'description')
 
 
 class PowerOutletBulkEditForm(
     form_from_model(PowerOutlet, ['label', 'type', 'feed_leg', 'power_port', 'mark_connected', 'description']),
-    NetBoxModelBulkEditForm
+    ComponentBulkEditForm
 ):
-    device = forms.ModelChoiceField(
-        queryset=Device.objects.all(),
-        required=False,
-        disabled=True,
-        widget=forms.HiddenInput()
-    )
     mark_connected = forms.NullBooleanField(
         required=False,
         widget=BulkEditNullBooleanSelect
@@ -978,10 +996,10 @@ class PowerOutletBulkEditForm(
 
     model = PowerOutlet
     fieldsets = (
-        (None, ('type', 'label', 'description', 'mark_connected')),
+        (None, ('module', 'type', 'label', 'description', 'mark_connected')),
         ('Power', ('feed_leg', 'power_port')),
     )
-    nullable_fields = ('label', 'type', 'feed_leg', 'power_port', 'description')
+    nullable_fields = ('module', 'label', 'type', 'feed_leg', 'power_port', 'description')
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
@@ -1001,14 +1019,8 @@ class InterfaceBulkEditForm(
         'mark_connected', 'description', 'mode', 'rf_role', 'rf_channel', 'rf_channel_frequency', 'rf_channel_width',
         'tx_power',
     ]),
-    NetBoxModelBulkEditForm
+    ComponentBulkEditForm
 ):
-    device = forms.ModelChoiceField(
-        queryset=Device.objects.all(),
-        required=False,
-        disabled=True,
-        widget=forms.HiddenInput()
-    )
     enabled = forms.NullBooleanField(
         required=False,
         widget=BulkEditNullBooleanSelect
@@ -1059,7 +1071,7 @@ class InterfaceBulkEditForm(
 
     model = Interface
     fieldsets = (
-        (None, ('type', 'label', 'speed', 'duplex', 'description')),
+        (None, ('module', 'type', 'label', 'speed', 'duplex', 'description')),
         ('Addressing', ('vrf', 'mac_address', 'wwn')),
         ('Operation', ('mtu', 'tx_power', 'enabled', 'mgmt_only', 'mark_connected')),
         ('Related Interfaces', ('parent', 'bridge', 'lag')),
@@ -1067,8 +1079,9 @@ class InterfaceBulkEditForm(
         ('Wireless', ('rf_role', 'rf_channel', 'rf_channel_frequency', 'rf_channel_width')),
     )
     nullable_fields = (
-        'label', 'parent', 'bridge', 'lag', 'speed', 'duplex', 'mac_address', 'wwn', 'mtu', 'description', 'mode',
-        'rf_channel', 'rf_channel_frequency', 'rf_channel_width', 'tx_power', 'untagged_vlan', 'tagged_vlans', 'vrf',
+        'module', 'label', 'parent', 'bridge', 'lag', 'speed', 'duplex', 'mac_address', 'wwn', 'mtu', 'description',
+        'mode', 'rf_channel', 'rf_channel_frequency', 'rf_channel_width', 'tx_power', 'untagged_vlan', 'tagged_vlans',
+        'vrf',
     )
 
     def __init__(self, *args, **kwargs):
@@ -1133,24 +1146,24 @@ class InterfaceBulkEditForm(
 
 class FrontPortBulkEditForm(
     form_from_model(FrontPort, ['label', 'type', 'color', 'mark_connected', 'description']),
-    NetBoxModelBulkEditForm
+    ComponentBulkEditForm
 ):
     model = FrontPort
     fieldsets = (
-        (None, ('type', 'label', 'color', 'description', 'mark_connected')),
+        (None, ('module', 'type', 'label', 'color', 'description', 'mark_connected')),
     )
-    nullable_fields = ('label', 'description')
+    nullable_fields = ('module', 'label', 'description')
 
 
 class RearPortBulkEditForm(
     form_from_model(RearPort, ['label', 'type', 'color', 'mark_connected', 'description']),
-    NetBoxModelBulkEditForm
+    ComponentBulkEditForm
 ):
     model = RearPort
     fieldsets = (
-        (None, ('type', 'label', 'color', 'description', 'mark_connected')),
+        (None, ('module', 'type', 'label', 'color', 'description', 'mark_connected')),
     )
-    nullable_fields = ('label', 'description')
+    nullable_fields = ('module', 'label', 'description')
 
 
 class ModuleBayBulkEditForm(