Browse Source

Table rendering optimizations

Jeremy Stretch 8 years ago
parent
commit
424c2a59d6
2 changed files with 17 additions and 13 deletions
  1. 4 4
      netbox/dcim/views.py
  2. 13 9
      netbox/ipam/views.py

+ 4 - 4
netbox/dcim/views.py

@@ -359,12 +359,12 @@ def devicetype(request, pk):
         natsorted(PowerOutletTemplate.objects.filter(device_type=devicetype), key=attrgetter('name'))
     )
     mgmt_interface_table = tables.InterfaceTemplateTable(
-        InterfaceTemplate.objects.order_naturally(devicetype.interface_ordering).filter(device_type=devicetype,
-                                                                                        mgmt_only=True)
+        list(InterfaceTemplate.objects.order_naturally(devicetype.interface_ordering).filter(device_type=devicetype,
+                                                                                             mgmt_only=True))
     )
     interface_table = tables.InterfaceTemplateTable(
-        InterfaceTemplate.objects.order_naturally(devicetype.interface_ordering).filter(device_type=devicetype,
-                                                                                        mgmt_only=False)
+        list(InterfaceTemplate.objects.order_naturally(devicetype.interface_ordering).filter(device_type=devicetype,
+                                                                                             mgmt_only=False))
     )
     devicebay_table = tables.DeviceBayTemplateTable(
         natsorted(DeviceBayTemplate.objects.filter(device_type=devicetype), key=attrgetter('name'))

+ 13 - 9
netbox/ipam/views.py

@@ -102,8 +102,10 @@ class VRFListView(ObjectListView):
 def vrf(request, pk):
 
     vrf = get_object_or_404(VRF.objects.all(), pk=pk)
-    prefixes = Prefix.objects.filter(vrf=vrf)
-    prefix_table = tables.PrefixBriefTable(prefixes)
+    prefix_table = tables.PrefixBriefTable(
+        list(Prefix.objects.filter(vrf=vrf).select_related('site', 'role'))
+    )
+    prefix_table.exclude = ('vrf',)
 
     return render(request, 'ipam/vrf.html', {
         'vrf': vrf,
@@ -401,7 +403,7 @@ def prefix(request, pk):
     # Duplicate prefixes table
     duplicate_prefixes = Prefix.objects.filter(vrf=prefix.vrf, prefix=str(prefix.prefix)).exclude(pk=prefix.pk)\
         .select_related('site', 'role')
-    duplicate_prefix_table = tables.PrefixBriefTable(duplicate_prefixes)
+    duplicate_prefix_table = tables.PrefixBriefTable(list(duplicate_prefixes))
 
     # Child prefixes table
     if prefix.vrf:
@@ -504,18 +506,20 @@ def ipaddress(request, pk):
     ipaddress = get_object_or_404(IPAddress.objects.select_related('interface__device'), pk=pk)
 
     # Parent prefixes table
-    parent_prefixes = Prefix.objects.filter(vrf=ipaddress.vrf, prefix__net_contains=str(ipaddress.address.ip))
-    parent_prefixes_table = tables.PrefixBriefTable(parent_prefixes)
+    parent_prefixes = Prefix.objects.filter(vrf=ipaddress.vrf, prefix__net_contains=str(ipaddress.address.ip))\
+        .select_related('site', 'role')
+    parent_prefixes_table = tables.PrefixBriefTable(list(parent_prefixes))
+    parent_prefixes_table.exclude = ('vrf',)
 
     # Duplicate IPs table
     duplicate_ips = IPAddress.objects.filter(vrf=ipaddress.vrf, address=str(ipaddress.address))\
         .exclude(pk=ipaddress.pk).select_related('interface__device', 'nat_inside')
-    duplicate_ips_table = tables.IPAddressBriefTable(duplicate_ips)
+    duplicate_ips_table = tables.IPAddressBriefTable(list(duplicate_ips))
 
     # Related IP table
     related_ips = IPAddress.objects.select_related('interface__device').exclude(address=str(ipaddress.address))\
         .filter(vrf=ipaddress.vrf, address__net_contained_or_equal=str(ipaddress.address))
-    related_ips_table = tables.IPAddressBriefTable(related_ips)
+    related_ips_table = tables.IPAddressBriefTable(list(related_ips))
 
     return render(request, 'ipam/ipaddress.html', {
         'ipaddress': ipaddress,
@@ -695,8 +699,8 @@ class VLANListView(ObjectListView):
 def vlan(request, pk):
 
     vlan = get_object_or_404(VLAN.objects.select_related('site', 'role'), pk=pk)
-    prefixes = Prefix.objects.filter(vlan=vlan)
-    prefix_table = tables.PrefixBriefTable(prefixes)
+    prefixes = Prefix.objects.filter(vlan=vlan).select_related('vrf', 'site', 'role')
+    prefix_table = tables.PrefixBriefTable(list(prefixes))
 
     return render(request, 'ipam/vlan.html', {
         'vlan': vlan,