#7844: Show module when viewing/editing device components

This commit is contained in:
jeremystretch 2022-02-11 11:09:07 -05:00
parent 71d3dc6e44
commit 3b80f67e4d
9 changed files with 133 additions and 10 deletions

View File

@ -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(),

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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