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

Fixes #7353: Fix bulk creation of device/VM components via list view

jeremystretch 4 лет назад
Родитель
Сommit
68b1234388

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

@@ -15,6 +15,7 @@
 * [#7324](https://github.com/netbox-community/netbox/issues/7324) - Fix TypeError exception in web UI when filtering objects using single-choice filters
 * [#7333](https://github.com/netbox-community/netbox/issues/7333) - Prevent inadvertent deletion of prior change records when deleting objects
 * [#7341](https://github.com/netbox-community/netbox/issues/7341) - Fix incorrect URL in circuit breadcrumbs
+* [#7353](https://github.com/netbox-community/netbox/issues/7353) - Fix bulk creation of device/VM components via list view
 * [#7356](https://github.com/netbox-community/netbox/issues/7356) - Fix display of model documentation when adding device components
 * [#7360](https://github.com/netbox-community/netbox/issues/7360) - Correct redirection URL after removing child device from device bay
 

+ 64 - 65
netbox/templates/dcim/device_list.html

@@ -1,70 +1,69 @@
 {% extends 'generic/object_list.html' %}
 
 {% block bulk_buttons %}
-    {% if perms.dcim.change_device %}
-        <div class="dropdown">
-            <button type="button" class="btn btn-sm btn-primary dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-                <i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add Components
+  {% if perms.dcim.change_device %}
+    <div class="dropdown">
+      <button type="button" class="btn btn-sm btn-primary dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+        <i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add Components
+      </button>
+      <ul class="dropdown-menu">
+        {% if perms.dcim.add_consoleport %}
+          <li>
+            <button type="submit" formaction="{% url 'dcim:device_bulk_add_consoleport' %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" class="dropdown-item">
+             Console Ports
             </button>
-            <ul class="dropdown-menu">
-                {% if perms.dcim.add_consoleport %}
-                <li>
-                    <a href="{% url 'dcim:device_bulk_add_consoleport' %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}"       
-                       class="dropdown-item formaction">
-                       Console Ports
-                    </a>
-                </li>
-                {% endif %}
-                {% if perms.dcim.add_consoleserverport %}
-                <li>
-                    <a href="{% url 'dcim:device_bulk_add_consoleserverport' %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}"
-                       class="dropdown-item formaction">Console Server Ports
-                    </a>
-                </li>
-                {% endif %}
-                {% if perms.dcim.add_powerport %}
-                <li>
-                    <a href="{% url 'dcim:device_bulk_add_powerport' %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" 
-                       class="dropdown-item formaction">Power Ports
-                    </a>
-                </li>
-                {% endif %}
-                {% if perms.dcim.add_poweroutlet %}
-                <li>
-                    <a href="{% url 'dcim:device_bulk_add_poweroutlet' %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" 
-                       class="dropdown-item formaction">Power Outlets
-                    </a>
-                </li>
-                {% endif %}
-                {% if perms.dcim.add_interface %}
-                <li>
-                    <a href="{% url 'dcim:device_bulk_add_interface' %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" 
-                       class="dropdown-item formaction">Interfaces
-                    </a>
-                </li>
-                {% endif %}
-                {% if perms.dcim.add_rearport %}
-                <li>
-                    <a href="{% url 'dcim:device_bulk_add_rearport' %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" 
-                       class="dropdown-item formaction">Rear Ports
-                    </a>
-                </li>
-                {% endif %}
-                {% if perms.dcim.add_devicebay %}
-                <li>
-                    <a href="{% url 'dcim:device_bulk_add_devicebay' %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" 
-                       class="dropdown-item formaction">Device Bays
-                    </a>
-                </li>
-                {% endif %}
-                {% if perms.dcim.add_inventoryitem %}
-                <li>
-                    <a href="{% url 'dcim:device_bulk_add_inventoryitem' %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" 
-                       class="dropdown-item formaction">Inventory Items
-                    </a>
-                </li>
-                {% endif %}
-            </ul>
-        </div>
-    {% endif %}
+          </li>
+        {% endif %}
+        {% if perms.dcim.add_consoleserverport %}
+          <li>
+            <button type="submit" formaction="{% url 'dcim:device_bulk_add_consoleserverport' %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" class="dropdown-item ">
+              Console Server Ports
+            </button>
+          </li>
+        {% endif %}
+        {% if perms.dcim.add_powerport %}
+          <li>
+            <button type="submit" formaction="{% url 'dcim:device_bulk_add_powerport' %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" class="dropdown-item">
+              Power Ports
+            </button>
+          </li>
+        {% endif %}
+        {% if perms.dcim.add_poweroutlet %}
+          <li>
+            <button type="submit" formaction="{% url 'dcim:device_bulk_add_poweroutlet' %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" class="dropdown-item">
+              Power Outlets
+            </button>
+          </li>
+        {% endif %}
+        {% if perms.dcim.add_interface %}
+          <li>
+              <button type="submit" formaction="{% url 'dcim:device_bulk_add_interface' %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}"
+                 class="dropdown-item">Interfaces
+              </button>
+          </li>
+        {% endif %}
+        {% if perms.dcim.add_rearport %}
+          <li>
+            <button type="submit" formaction="{% url 'dcim:device_bulk_add_rearport' %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" class="dropdown-item">
+              Rear Ports
+            </button>
+          </li>
+        {% endif %}
+        {% if perms.dcim.add_devicebay %}
+          <li>
+            <button type="submit" formaction="{% url 'dcim:device_bulk_add_devicebay' %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" class="dropdown-item">
+              Device Bays
+            </button>
+          </li>
+        {% endif %}
+        {% if perms.dcim.add_inventoryitem %}
+          <li>
+            <button type="submit" formaction="{% url 'dcim:device_bulk_add_inventoryitem' %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" class="dropdown-item">
+              Inventory Items
+            </button>
+          </li>
+        {% endif %}
+      </ul>
+    </div>
+  {% endif %}
 {% endblock %}

+ 15 - 9
netbox/templates/virtualization/virtualmachine_list.html

@@ -1,14 +1,20 @@
 {% extends 'generic/object_list.html' %}
 
 {% block bulk_buttons %}
-    {% if perms.virtualization.change_virtualmachine %}
-        <div class="btn-group">
-            <button type="button" class="btn btn-sm btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-                <span class="mdi mdi-plus-thick" aria-hidden="true"></span> Add Components <span class="caret"></span>
+  {% if perms.virtualization.change_virtualmachine %}
+    <div class="dropdown">
+      <button type="button" class="btn btn-sm btn-primary dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+        <i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add Components
+      </button>
+      <ul class="dropdown-menu">
+        {% if perms.virtualization.add_vminterface %}
+          <li>
+            <button type="submit" formaction="{% url 'virtualization:virtualmachine_bulk_add_vminterface' %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" class="dropdown-item">
+              Interfaces
             </button>
-            <ul class="dropdown-menu">
-                {% if perms.virtualization.add_vminterface %}<li><a href="{% url 'virtualization:virtualmachine_bulk_add_vminterface' %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" class="formaction">Interfaces</a></li>{% endif %}
-            </ul>
-        </div>
-    {% endif %}
+          </li>
+        {% endif %}
+      </ul>
+    </div>
+  {% endif %}
 {% endblock %}

+ 1 - 0
netbox/virtualization/views.py

@@ -506,6 +506,7 @@ class VirtualMachineBulkAddInterfaceView(generic.BulkComponentCreateView):
     model_form = forms.VMInterfaceForm
     filterset = filtersets.VirtualMachineFilterSet
     table = tables.VirtualMachineTable
+    default_return_url = 'virtualization:virtualmachine_list'
 
     def get_required_permission(self):
         return f'virtualization.add_vminterface'