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

Fixes #8970: Permit nested inventory item templates on device types

jeremystretch 3 лет назад
Родитель
Сommit
340ff82487

+ 1 - 0
docs/release-notes/version-3.2.md

@@ -151,6 +151,7 @@ Where it is desired to limit the range of available VLANs within a group, users
 * [#8845](https://github.com/netbox-community/netbox/issues/8845) - Correct default ASN formatting in table
 * [#8869](https://github.com/netbox-community/netbox/issues/8869) - Fix NoReverseMatch exception when displaying tag w/assignments
 * [#8872](https://github.com/netbox-community/netbox/issues/8872) - Enable filtering by custom object fields
+* [#8970](https://github.com/netbox-community/netbox/issues/8970) - Permit nested inventory item templates on device types
 
 ### Other Changes
 

+ 2 - 7
netbox/dcim/forms/models.py

@@ -1025,10 +1025,10 @@ class DeviceBayTemplateForm(BootstrapMixin, forms.ModelForm):
 
 class InventoryItemTemplateForm(BootstrapMixin, forms.ModelForm):
     parent = DynamicModelChoiceField(
-        queryset=InventoryItem.objects.all(),
+        queryset=InventoryItemTemplate.objects.all(),
         required=False,
         query_params={
-            'device_id': '$device'
+            'devicetype_id': '$device_type'
         }
     )
     role = DynamicModelChoiceField(
@@ -1050,11 +1050,6 @@ class InventoryItemTemplateForm(BootstrapMixin, forms.ModelForm):
         widget=forms.HiddenInput
     )
 
-    fieldsets = (
-        ('Inventory Item', ('device_type', 'parent', 'name', 'label', 'role', 'description')),
-        ('Hardware', ('manufacturer', 'part_id')),
-    )
-
     class Meta:
         model = InventoryItemTemplate
         fields = [

+ 3 - 1
netbox/dcim/tables/devicetypes.py

@@ -241,5 +241,7 @@ class InventoryItemTemplateTable(ComponentTemplateTable):
 
     class Meta(ComponentTemplateTable.Meta):
         model = InventoryItemTemplate
-        fields = ('pk', 'name', 'label', 'role', 'manufacturer', 'part_id', 'component', 'description', 'actions')
+        fields = (
+            'pk', 'name', 'label', 'parent', 'role', 'manufacturer', 'part_id', 'component', 'description', 'actions',
+        )
         empty_text = "None"

+ 30 - 26
netbox/templates/dcim/component_template_create.html

@@ -2,33 +2,37 @@
 {% load form_helpers %}
 
 {% block form %}
-  <div class="row mb-2">
-    <div class="offset-sm-3">
-      <ul class="nav nav-pills" role="tablist">
-        <li role="presentation" class="nav-item">
-          <button role="tab" type="button" id="devicetype_tab" data-bs-toggle="tab" aria-controls="devicetype" data-bs-target="#devicetype" class="nav-link {% if not form.initial.module_type %}active{% endif %}">
-            Device Type
-          </button>
-        </li>
-        <li role="presentation" class="nav-item">
-          <button role="tab" type="button" id="moduletype_tab" data-bs-toggle="tab" aria-controls="moduletype" data-bs-target="#moduletype" class="nav-link {% if form.initial.module_type %}active{% endif %}">
-            Module Type
-          </button>
-        </li>
-      </ul>
+  {% if form.module_type %}
+    <div class="row mb-2">
+      <div class="offset-sm-3">
+        <ul class="nav nav-pills" role="tablist">
+          <li role="presentation" class="nav-item">
+            <button role="tab" type="button" id="devicetype_tab" data-bs-toggle="tab" aria-controls="devicetype" data-bs-target="#devicetype" class="nav-link {% if not form.initial.module_type %}active{% endif %}">
+              Device Type
+            </button>
+          </li>
+          <li role="presentation" class="nav-item">
+            <button role="tab" type="button" id="moduletype_tab" data-bs-toggle="tab" aria-controls="moduletype" data-bs-target="#moduletype" class="nav-link {% if form.initial.module_type %}active{% endif %}">
+              Module Type
+            </button>
+          </li>
+        </ul>
+      </div>
     </div>
-  </div>
-  <div class="tab-content p-0 border-0">
-    <div class="tab-pane {% if not form.initial.module_type %}active{% endif %}" id="devicetype" role="tabpanel">
-      {% render_field replication_form.device_type %}
+    <div class="tab-content p-0 border-0">
+      <div class="tab-pane {% if not form.initial.module_type %}active{% endif %}" id="devicetype" role="tabpanel">
+        {% render_field replication_form.device_type %}
+      </div>
+      <div class="tab-pane {% if form.initial.module_type %}active{% endif %}" id="moduletype" role="tabpanel">
+        {% render_field replication_form.module_type %}
+      </div>
     </div>
-    <div class="tab-pane {% if form.initial.module_type %}active{% endif %}" id="moduletype" role="tabpanel">
-      {% render_field replication_form.module_type %}
-    </div>
-    {% block replication_fields %}
-      {% render_field replication_form.name_pattern %}
-      {% render_field replication_form.label_pattern %}
-    {% endblock replication_fields %}
-  </div>
+  {% else %}
+    {% render_field replication_form.device_type %}
+  {% endif %}
+  {% block replication_fields %}
+    {% render_field replication_form.name_pattern %}
+    {% render_field replication_form.label_pattern %}
+  {% endblock replication_fields %}
   {{ block.super }}
 {% endblock form %}