mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
15541 Add component selector to InventoryItemTemplate (#15691)
* 15541 update InventoryItemTemplateForm * 15541 update InventoryItemTemplateForm * Remove custom template --------- Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
This commit is contained in:
@ -1002,6 +1002,7 @@ class InventoryItemTemplateForm(ComponentTemplateForm):
|
|||||||
queryset=Manufacturer.objects.all(),
|
queryset=Manufacturer.objects.all(),
|
||||||
required=False
|
required=False
|
||||||
)
|
)
|
||||||
|
|
||||||
# Assigned component selectors
|
# Assigned component selectors
|
||||||
consoleporttemplate = DynamicModelChoiceField(
|
consoleporttemplate = DynamicModelChoiceField(
|
||||||
queryset=ConsolePortTemplate.objects.all(),
|
queryset=ConsolePortTemplate.objects.all(),
|
||||||
@ -1063,8 +1064,19 @@ class InventoryItemTemplateForm(ComponentTemplateForm):
|
|||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet(
|
FieldSet(
|
||||||
'device_type', 'parent', 'name', 'label', 'role', 'manufacturer', 'part_id', 'description',
|
'device_type', 'parent', 'name', 'label', 'role', 'manufacturer', 'part_id', 'description',
|
||||||
'component_type', 'component_id',
|
|
||||||
),
|
),
|
||||||
|
FieldSet(
|
||||||
|
TabbedGroups(
|
||||||
|
FieldSet('interfacetemplate', name=_('Interface')),
|
||||||
|
FieldSet('consoleporttemplate', name=_('Console Port')),
|
||||||
|
FieldSet('consoleserverporttemplate', name=_('Console Server Port')),
|
||||||
|
FieldSet('frontporttemplate', name=_('Front Port')),
|
||||||
|
FieldSet('rearporttemplate', name=_('Rear Port')),
|
||||||
|
FieldSet('powerporttemplate', name=_('Power Port')),
|
||||||
|
FieldSet('poweroutlettemplate', name=_('Power Outlet')),
|
||||||
|
),
|
||||||
|
name=_('Component Assignment')
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
@ -1079,22 +1091,17 @@ class InventoryItemTemplateForm(ComponentTemplateForm):
|
|||||||
component_type = initial.get('component_type')
|
component_type = initial.get('component_type')
|
||||||
component_id = initial.get('component_id')
|
component_id = initial.get('component_id')
|
||||||
|
|
||||||
# Used for picking the default active tab for component selection
|
|
||||||
self.no_component = True
|
|
||||||
|
|
||||||
if instance:
|
if instance:
|
||||||
# When editing set the initial value for component selection
|
# When editing set the initial value for component selection
|
||||||
for component_model in ContentType.objects.filter(MODULAR_COMPONENT_TEMPLATE_MODELS):
|
for component_model in ContentType.objects.filter(MODULAR_COMPONENT_TEMPLATE_MODELS):
|
||||||
if type(instance.component) is component_model.model_class():
|
if type(instance.component) is component_model.model_class():
|
||||||
initial[component_model.model] = instance.component
|
initial[component_model.model] = instance.component
|
||||||
self.no_component = False
|
|
||||||
break
|
break
|
||||||
elif component_type and component_id:
|
elif component_type and component_id:
|
||||||
# When adding the InventoryItem from a component page
|
# When adding the InventoryItem from a component page
|
||||||
if content_type := ContentType.objects.filter(MODULAR_COMPONENT_TEMPLATE_MODELS).filter(pk=component_type).first():
|
if content_type := ContentType.objects.filter(MODULAR_COMPONENT_TEMPLATE_MODELS).filter(pk=component_type).first():
|
||||||
if component := content_type.model_class().objects.filter(pk=component_id).first():
|
if component := content_type.model_class().objects.filter(pk=component_id).first():
|
||||||
initial[content_type.model] = component
|
initial[content_type.model] = component
|
||||||
self.no_component = False
|
|
||||||
|
|
||||||
kwargs['initial'] = initial
|
kwargs['initial'] = initial
|
||||||
|
|
||||||
|
@ -1655,7 +1655,6 @@ class InventoryItemTemplateCreateView(generic.ComponentCreateView):
|
|||||||
queryset = InventoryItemTemplate.objects.all()
|
queryset = InventoryItemTemplate.objects.all()
|
||||||
form = forms.InventoryItemTemplateCreateForm
|
form = forms.InventoryItemTemplateCreateForm
|
||||||
model_form = forms.InventoryItemTemplateForm
|
model_form = forms.InventoryItemTemplateForm
|
||||||
template_name = 'dcim/inventoryitemtemplate_edit.html'
|
|
||||||
|
|
||||||
def alter_object(self, instance, request):
|
def alter_object(self, instance, request):
|
||||||
# Set component (if any)
|
# Set component (if any)
|
||||||
@ -1673,7 +1672,6 @@ class InventoryItemTemplateCreateView(generic.ComponentCreateView):
|
|||||||
class InventoryItemTemplateEditView(generic.ObjectEditView):
|
class InventoryItemTemplateEditView(generic.ObjectEditView):
|
||||||
queryset = InventoryItemTemplate.objects.all()
|
queryset = InventoryItemTemplate.objects.all()
|
||||||
form = forms.InventoryItemTemplateForm
|
form = forms.InventoryItemTemplateForm
|
||||||
template_name = 'dcim/inventoryitemtemplate_edit.html'
|
|
||||||
|
|
||||||
|
|
||||||
@register_model_view(InventoryItemTemplate, 'delete')
|
@register_model_view(InventoryItemTemplate, 'delete')
|
||||||
|
@ -1,104 +0,0 @@
|
|||||||
{% extends 'generic/object_edit.html' %}
|
|
||||||
{% load static %}
|
|
||||||
{% load form_helpers %}
|
|
||||||
{% load helpers %}
|
|
||||||
{% load i18n %}
|
|
||||||
|
|
||||||
{% block form %}
|
|
||||||
<div class="field-group my-5">
|
|
||||||
<div class="row mb-2">
|
|
||||||
<h5 class="offset-sm-3">{% trans "Inventory Item" %}</h5>
|
|
||||||
</div>
|
|
||||||
{% render_field form.device_type %}
|
|
||||||
{% render_field form.parent %}
|
|
||||||
{% render_field form.name %}
|
|
||||||
{% render_field form.label %}
|
|
||||||
{% render_field form.role %}
|
|
||||||
{% render_field form.description %}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="field-group my-5">
|
|
||||||
<div class="row mb-2">
|
|
||||||
<h5 class="offset-sm-3">{% trans "Hardware" %}</h5>
|
|
||||||
</div>
|
|
||||||
{% render_field form.manufacturer %}
|
|
||||||
{% render_field form.part_id %}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="field-group my-5">
|
|
||||||
<div class="row mb-2">
|
|
||||||
<h5 class="offset-sm-3">{% trans "Component Assignment" %}</h5>
|
|
||||||
</div>
|
|
||||||
<div class="row mb-2 offset-sm-3">
|
|
||||||
<ul class="nav nav-pills" role="tablist">
|
|
||||||
<li role="presentation" class="nav-item">
|
|
||||||
<button role="tab" type="button" id="consoleport_tab" data-bs-toggle="tab" aria-controls="consoleport" data-bs-target="#consoleport" class="nav-link {% if form.initial.consoleporttemplate or form.no_component %}active{% endif %}">
|
|
||||||
{% trans "Console Port" %}
|
|
||||||
</button>
|
|
||||||
</li>
|
|
||||||
<li role="presentation" class="nav-item">
|
|
||||||
<button role="tab" type="button" id="consoleserverport_tab" data-bs-toggle="tab" aria-controls="consoleserverport" data-bs-target="#consoleserverport" class="nav-link {% if form.initial.consoleserverporttemplate %}active{% endif %}">
|
|
||||||
{% trans "Console Server Port" %}
|
|
||||||
</button>
|
|
||||||
</li>
|
|
||||||
<li role="presentation" class="nav-item">
|
|
||||||
<button role="tab" type="button" id="frontport_tab" data-bs-toggle="tab" aria-controls="frontport" data-bs-target="#frontport" class="nav-link {% if form.initial.frontporttemplate %}active{% endif %}">
|
|
||||||
{% trans "Front Port" %}
|
|
||||||
</button>
|
|
||||||
</li>
|
|
||||||
<li role="presentation" class="nav-item">
|
|
||||||
<button role="tab" type="button" id="interface_tab" data-bs-toggle="tab" aria-controls="interface" data-bs-target="#interface" class="nav-link {% if form.initial.interfacetemplate %}active{% endif %}">
|
|
||||||
{% trans "Interface" %}
|
|
||||||
</button>
|
|
||||||
</li>
|
|
||||||
<li role="presentation" class="nav-item">
|
|
||||||
<button role="tab" type="button" id="poweroutlet_tab" data-bs-toggle="tab" aria-controls="poweroutlet" data-bs-target="#poweroutlet" class="nav-link {% if form.initial.poweroutlettemplate %}active{% endif %}">
|
|
||||||
{% trans "Power Outlet" %}
|
|
||||||
</button>
|
|
||||||
</li>
|
|
||||||
<li role="presentation" class="nav-item">
|
|
||||||
<button role="tab" type="button" id="powerport_tab" data-bs-toggle="tab" aria-controls="powerport" data-bs-target="#powerport" class="nav-link {% if form.initial.powerporttemplate %}active{% endif %}">
|
|
||||||
{% trans "Power Port" %}
|
|
||||||
</button>
|
|
||||||
</li>
|
|
||||||
<li role="presentation" class="nav-item">
|
|
||||||
<button role="tab" type="button" id="rearport_tab" data-bs-toggle="tab" aria-controls="rearport" data-bs-target="#rearport" class="nav-link {% if form.initial.rearporttemplate %}active{% endif %}">
|
|
||||||
{% trans "Rear Port" %}
|
|
||||||
</button>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="tab-content p-0 border-0">
|
|
||||||
<div class="tab-pane {% if form.initial.consoleporttemplate or form.no_component %}active{% endif %}" id="consoleport" role="tabpanel" aria-labeled-by="consoleport_tab">
|
|
||||||
{% render_field form.consoleporttemplate %}
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane {% if form.initial.consoleserverporttemplate %}active{% endif %}" id="consoleserverport" role="tabpanel" aria-labeled-by="consoleserverport_tab">
|
|
||||||
{% render_field form.consoleserverporttemplate %}
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane {% if form.initial.frontporttemplate %}active{% endif %}" id="frontport" role="tabpanel" aria-labeled-by="frontport_tab">
|
|
||||||
{% render_field form.frontporttemplate %}
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane {% if form.initial.interfacetemplate %}active{% endif %}" id="interface" role="tabpanel" aria-labeled-by="interface_tab">
|
|
||||||
{% render_field form.interfacetemplate %}
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane {% if form.initial.poweroutlettemplate %}active{% endif %}" id="poweroutlet" role="tabpanel" aria-labeled-by="poweroutlet_tab">
|
|
||||||
{% render_field form.poweroutlettemplate %}
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane {% if form.initial.powerporttemplate %}active{% endif %}" id="powerport" role="tabpanel" aria-labeled-by="powerport_tab">
|
|
||||||
{% render_field form.powerporttemplate %}
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane {% if form.initial.rearporttemplate %}active{% endif %}" id="rearport" role="tabpanel" aria-labeled-by="rearport_tab">
|
|
||||||
{% render_field form.rearporttemplate %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% if form.custom_fields %}
|
|
||||||
<div class="field-group my-5">
|
|
||||||
<div class="row mb-2">
|
|
||||||
<h5 class="offset-sm-3">{% trans "Custom Fields" %}</h5>
|
|
||||||
</div>
|
|
||||||
{% render_custom_fields form %}
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
{% endblock %}
|
|
Reference in New Issue
Block a user