Просмотр исходного кода

#7844: Show module when viewing/editing device components

jeremystretch 4 лет назад
Родитель
Сommit
3b80f67e4d

+ 62 - 10
netbox/dcim/forms/models.py

@@ -1148,6 +1148,13 @@ class InventoryItemTemplateForm(BootstrapMixin, forms.ModelForm):
 #
 
 class ConsolePortForm(NetBoxModelForm):
+    module = DynamicModelChoiceField(
+        queryset=Module.objects.all(),
+        required=False,
+        query_params={
+            'device_id': '$device',
+        }
+    )
     tags = DynamicModelMultipleChoiceField(
         queryset=Tag.objects.all(),
         required=False
@@ -1156,7 +1163,7 @@ class ConsolePortForm(NetBoxModelForm):
     class Meta:
         model = ConsolePort
         fields = [
-            'device', 'name', 'label', 'type', 'speed', 'mark_connected', 'description', 'tags',
+            'device', 'module', 'name', 'label', 'type', 'speed', 'mark_connected', 'description', 'tags',
         ]
         widgets = {
             'device': forms.HiddenInput(),
@@ -1166,6 +1173,13 @@ class ConsolePortForm(NetBoxModelForm):
 
 
 class ConsoleServerPortForm(NetBoxModelForm):
+    module = DynamicModelChoiceField(
+        queryset=Module.objects.all(),
+        required=False,
+        query_params={
+            'device_id': '$device',
+        }
+    )
     tags = DynamicModelMultipleChoiceField(
         queryset=Tag.objects.all(),
         required=False
@@ -1174,7 +1188,7 @@ class ConsoleServerPortForm(NetBoxModelForm):
     class Meta:
         model = ConsoleServerPort
         fields = [
-            'device', 'name', 'label', 'type', 'speed', 'mark_connected', 'description', 'tags',
+            'device', 'module', 'name', 'label', 'type', 'speed', 'mark_connected', 'description', 'tags',
         ]
         widgets = {
             'device': forms.HiddenInput(),
@@ -1184,6 +1198,13 @@ class ConsoleServerPortForm(NetBoxModelForm):
 
 
 class PowerPortForm(NetBoxModelForm):
+    module = DynamicModelChoiceField(
+        queryset=Module.objects.all(),
+        required=False,
+        query_params={
+            'device_id': '$device',
+        }
+    )
     tags = DynamicModelMultipleChoiceField(
         queryset=Tag.objects.all(),
         required=False
@@ -1192,7 +1213,8 @@ class PowerPortForm(NetBoxModelForm):
     class Meta:
         model = PowerPort
         fields = [
-            'device', 'name', 'label', 'type', 'maximum_draw', 'allocated_draw', 'mark_connected', 'description',
+            'device', 'module', 'name', 'label', 'type', 'maximum_draw', 'allocated_draw', 'mark_connected',
+            'description',
             'tags',
         ]
         widgets = {
@@ -1202,6 +1224,13 @@ class PowerPortForm(NetBoxModelForm):
 
 
 class PowerOutletForm(NetBoxModelForm):
+    module = DynamicModelChoiceField(
+        queryset=Module.objects.all(),
+        required=False,
+        query_params={
+            'device_id': '$device',
+        }
+    )
     power_port = DynamicModelChoiceField(
         queryset=PowerPort.objects.all(),
         required=False,
@@ -1217,7 +1246,8 @@ class PowerOutletForm(NetBoxModelForm):
     class Meta:
         model = PowerOutlet
         fields = [
-            'device', 'name', 'label', 'type', 'power_port', 'feed_leg', 'mark_connected', 'description', 'tags',
+            'device', 'module', 'name', 'label', 'type', 'power_port', 'feed_leg', 'mark_connected', 'description',
+            'tags',
         ]
         widgets = {
             'device': forms.HiddenInput(),
@@ -1227,6 +1257,13 @@ class PowerOutletForm(NetBoxModelForm):
 
 
 class InterfaceForm(InterfaceCommonForm, NetBoxModelForm):
+    module = DynamicModelChoiceField(
+        queryset=Module.objects.all(),
+        required=False,
+        query_params={
+            'device_id': '$device',
+        }
+    )
     parent = DynamicModelChoiceField(
         queryset=Interface.objects.all(),
         required=False,
@@ -1299,7 +1336,7 @@ class InterfaceForm(InterfaceCommonForm, NetBoxModelForm):
     )
 
     fieldsets = (
-        ('Interface', ('device', 'name', 'type', 'speed', 'duplex', 'label', 'description', 'tags')),
+        ('Interface', ('device', 'module', 'name', 'type', 'speed', 'duplex', 'label', 'description', 'tags')),
         ('Addressing', ('vrf', 'mac_address', 'wwn')),
         ('Operation', ('mtu', 'tx_power', 'enabled', 'mgmt_only', 'mark_connected')),
         ('Related Interfaces', ('parent', 'bridge', 'lag')),
@@ -1312,9 +1349,10 @@ class InterfaceForm(InterfaceCommonForm, NetBoxModelForm):
     class Meta:
         model = Interface
         fields = [
-            'device', 'name', 'label', 'type', 'speed', 'duplex', 'enabled', 'parent', 'bridge', 'lag', 'mac_address', 'wwn', 'mtu',
-            'mgmt_only', 'mark_connected', 'description', 'mode', 'rf_role', 'rf_channel', 'rf_channel_frequency',
-            'rf_channel_width', 'tx_power', 'wireless_lans', 'untagged_vlan', 'tagged_vlans', 'vrf', 'tags',
+            'device', 'module', 'name', 'label', 'type', 'speed', 'duplex', 'enabled', 'parent', 'bridge', 'lag',
+            'mac_address', 'wwn', 'mtu', 'mgmt_only', 'mark_connected', 'description', 'mode', 'rf_role', 'rf_channel',
+            'rf_channel_frequency', 'rf_channel_width', 'tx_power', 'wireless_lans', 'untagged_vlan', 'tagged_vlans',
+            'vrf', 'tags',
         ]
         widgets = {
             'device': forms.HiddenInput(),
@@ -1336,6 +1374,13 @@ class InterfaceForm(InterfaceCommonForm, NetBoxModelForm):
 
 
 class FrontPortForm(NetBoxModelForm):
+    module = DynamicModelChoiceField(
+        queryset=Module.objects.all(),
+        required=False,
+        query_params={
+            'device_id': '$device',
+        }
+    )
     rear_port = DynamicModelChoiceField(
         queryset=RearPort.objects.all(),
         query_params={
@@ -1350,7 +1395,7 @@ class FrontPortForm(NetBoxModelForm):
     class Meta:
         model = FrontPort
         fields = [
-            'device', 'name', 'label', 'type', 'color', 'rear_port', 'rear_port_position', 'mark_connected',
+            'device', 'module', 'name', 'label', 'type', 'color', 'rear_port', 'rear_port_position', 'mark_connected',
             'description', 'tags',
         ]
         widgets = {
@@ -1360,6 +1405,13 @@ class FrontPortForm(NetBoxModelForm):
 
 
 class RearPortForm(NetBoxModelForm):
+    module = DynamicModelChoiceField(
+        queryset=Module.objects.all(),
+        required=False,
+        query_params={
+            'device_id': '$device',
+        }
+    )
     tags = DynamicModelMultipleChoiceField(
         queryset=Tag.objects.all(),
         required=False
@@ -1368,7 +1420,7 @@ class RearPortForm(NetBoxModelForm):
     class Meta:
         model = RearPort
         fields = [
-            'device', 'name', 'label', 'type', 'color', 'positions', 'mark_connected', 'description', 'tags',
+            'device', 'module', 'name', 'label', 'type', 'color', 'positions', 'mark_connected', 'description', 'tags',
         ]
         widgets = {
             'device': forms.HiddenInput(),

+ 10 - 0
netbox/templates/dcim/consoleport.html

@@ -24,6 +24,16 @@
                                 <a href="{{ object.device.get_absolute_url }}">{{ object.device }}</a>
                             </td>
                         </tr>
+                        <tr>
+                            <th scope="row">Module</th>
+                            <td>
+                              {% if object.module %}
+                                <a href="{{ object.module.get_absolute_url }}">{{ object.module }}</a>
+                              {% else %}
+                                {{ None|placeholder }}
+                              {% endif %}
+                            </td>
+                        </tr>
                         <tr>
                             <th scope="row">Name</th>
                             <td>{{ object.name }}</td>

+ 10 - 0
netbox/templates/dcim/consoleserverport.html

@@ -24,6 +24,16 @@
                                 <a href="{{ object.device.get_absolute_url }}">{{ object.device }}</a>
                             </td>
                         </tr>
+                        <tr>
+                            <th scope="row">Module</th>
+                            <td>
+                              {% if object.module %}
+                                <a href="{{ object.module.get_absolute_url }}">{{ object.module }}</a>
+                              {% else %}
+                                {{ None|placeholder }}
+                              {% endif %}
+                            </td>
+                        </tr>
                         <tr>
                             <th scope="row">Name</th>
                             <td>{{ object.name }}</td>

+ 10 - 0
netbox/templates/dcim/frontport.html

@@ -24,6 +24,16 @@
                                 <a href="{{ object.device.get_absolute_url }}">{{ object.device }}</a>
                             </td>
                         </tr>
+                        <tr>
+                            <th scope="row">Module</th>
+                            <td>
+                              {% if object.module %}
+                                <a href="{{ object.module.get_absolute_url }}">{{ object.module }}</a>
+                              {% else %}
+                                {{ None|placeholder }}
+                              {% endif %}
+                            </td>
+                        </tr>
                         <tr>
                             <th scope="row">Name</th>
                             <td>{{ object.name }}</td>

+ 10 - 0
netbox/templates/dcim/interface.html

@@ -34,6 +34,16 @@
                                 <a href="{{ object.device.get_absolute_url }}">{{ object.device }}</a>
                             </td>
                         </tr>
+                        <tr>
+                            <th scope="row">Module</th>
+                            <td>
+                              {% if object.module %}
+                                <a href="{{ object.module.get_absolute_url }}">{{ object.module }}</a>
+                              {% else %}
+                                {{ None|placeholder }}
+                              {% endif %}
+                            </td>
+                        </tr>
                         <tr>
                             <th scope="row">Name</th>
                             <td>{{ object.name }}</td>

+ 1 - 0
netbox/templates/dcim/interface_edit.html

@@ -19,6 +19,7 @@
                 </div>
             </div>
         {% endif %}
+        {% render_field form.module %}
         {% render_field form.name %}
         {% render_field form.type %}
         {% render_field form.speed %}

+ 10 - 0
netbox/templates/dcim/poweroutlet.html

@@ -24,6 +24,16 @@
                                 <a href="{{ object.device.get_absolute_url }}">{{ object.device }}</a>
                             </td>
                         </tr>
+                        <tr>
+                            <th scope="row">Module</th>
+                            <td>
+                              {% if object.module %}
+                                <a href="{{ object.module.get_absolute_url }}">{{ object.module }}</a>
+                              {% else %}
+                                {{ None|placeholder }}
+                              {% endif %}
+                            </td>
+                        </tr>
                         <tr>
                             <th scope="row">Name</th>
                             <td>{{ object.name }}</td>

+ 10 - 0
netbox/templates/dcim/powerport.html

@@ -24,6 +24,16 @@
                                 <a href="{{ object.device.get_absolute_url }}">{{ object.device }}</a>
                             </td>
                         </tr>
+                        <tr>
+                            <th scope="row">Module</th>
+                            <td>
+                              {% if object.module %}
+                                <a href="{{ object.module.get_absolute_url }}">{{ object.module }}</a>
+                              {% else %}
+                                {{ None|placeholder }}
+                              {% endif %}
+                            </td>
+                        </tr>
                         <tr>
                             <th scope="row">Name</th>
                             <td>{{ object.name }}</td>

+ 10 - 0
netbox/templates/dcim/rearport.html

@@ -24,6 +24,16 @@
                                 <a href="{{ object.device.get_absolute_url }}">{{ object.device }}</a>
                             </td>
                         </tr>
+                        <tr>
+                            <th scope="row">Module</th>
+                            <td>
+                              {% if object.module %}
+                                <a href="{{ object.module.get_absolute_url }}">{{ object.module }}</a>
+                              {% else %}
+                                {{ None|placeholder }}
+                              {% endif %}
+                            </td>
+                        </tr>
                         <tr>
                             <th scope="row">Name</th>
                             <td>{{ object.name }}</td>