Kaynağa Gözat

Update prefix children views to use ObjectChildrenView

jeremystretch 4 yıl önce
ebeveyn
işleme
cfdb985d00
1 değiştirilmiş dosya ile 26 ekleme ve 69 silme
  1. 26 69
      netbox/ipam/views.py

+ 26 - 69
netbox/ipam/views.py

@@ -453,103 +453,60 @@ class PrefixView(generic.ObjectView):
         }
         }
 
 
 
 
-class PrefixPrefixesView(generic.ObjectView):
+class PrefixPrefixesView(generic.ObjectChildrenView):
     queryset = Prefix.objects.all()
     queryset = Prefix.objects.all()
+    child_model = Prefix
+    table = tables.PrefixTable
     template_name = 'ipam/prefix/prefixes.html'
     template_name = 'ipam/prefix/prefixes.html'
 
 
-    def get_extra_context(self, request, instance):
-        # Find all child prefixes contained in this prefix
-        prefix_list = instance.get_child_prefixes().restrict(request.user, 'view').prefetch_related(
-            'site', 'vlan', 'role',
-        )
+    def get_children(self, request, parent):
+        child_prefixes = parent.get_child_prefixes().restrict(request.user, 'view')
 
 
-        # Return List of requested Prefixes
+        # Add available prefixes if requested
         show_available = bool(request.GET.get('show_available', 'true') == 'true')
         show_available = bool(request.GET.get('show_available', 'true') == 'true')
         show_assigned = bool(request.GET.get('show_assigned', 'true') == 'true')
         show_assigned = bool(request.GET.get('show_assigned', 'true') == 'true')
-        child_prefixes = add_requested_prefixes(instance.prefix, prefix_list, show_available, show_assigned)
-
-        table = tables.PrefixTable(child_prefixes, user=request.user, exclude=('utilization',))
-        if request.user.has_perm('ipam.change_prefix') or request.user.has_perm('ipam.delete_prefix'):
-            table.columns.show('pk')
-        paginate_table(table, request)
+        child_prefixes = add_requested_prefixes(parent.prefix, child_prefixes, show_available, show_assigned)
 
 
-        bulk_querystring = 'vrf_id={}&within={}'.format(instance.vrf.pk if instance.vrf else '0', instance.prefix)
-
-        # Compile permissions list for rendering the object table
-        permissions = {
-            'change': request.user.has_perm('ipam.change_prefix'),
-            'delete': request.user.has_perm('ipam.delete_prefix'),
-        }
+        return child_prefixes
 
 
+    def get_extra_context(self, request, instance):
         return {
         return {
-            'table': table,
-            'permissions': permissions,
-            'bulk_querystring': bulk_querystring,
+            'bulk_querystring': f"vrf_id={instance.vrf.pk if instance.vrf else '0'}&within={instance.prefix}",
             'active_tab': 'prefixes',
             'active_tab': 'prefixes',
             'first_available_prefix': instance.get_first_available_prefix(),
             'first_available_prefix': instance.get_first_available_prefix(),
-            'show_available': show_available,
-            'show_assigned': show_assigned,
+            'show_available': bool(request.GET.get('show_available', 'true') == 'true'),
+            'show_assigned': bool(request.GET.get('show_assigned', 'true') == 'true'),
         }
         }
 
 
 
 
-class PrefixIPRangesView(generic.ObjectView):
+class PrefixIPRangesView(generic.ObjectChildrenView):
     queryset = Prefix.objects.all()
     queryset = Prefix.objects.all()
+    child_model = IPRange
+    table = tables.IPRangeTable
     template_name = 'ipam/prefix/ip_ranges.html'
     template_name = 'ipam/prefix/ip_ranges.html'
 
 
-    def get_extra_context(self, request, instance):
-        # Find all IPRanges belonging to this Prefix
-        ip_ranges = instance.get_child_ranges().restrict(request.user, 'view').prefetch_related('vrf')
-
-        table = tables.IPRangeTable(ip_ranges, user=request.user)
-        if request.user.has_perm('ipam.change_iprange') or request.user.has_perm('ipam.delete_iprange'):
-            table.columns.show('pk')
-        paginate_table(table, request)
-
-        bulk_querystring = 'vrf_id={}&parent={}'.format(instance.vrf.pk if instance.vrf else '0', instance.prefix)
-
-        # Compile permissions list for rendering the object table
-        permissions = {
-            'change': request.user.has_perm('ipam.change_iprange'),
-            'delete': request.user.has_perm('ipam.delete_iprange'),
-        }
+    def get_children(self, request, parent):
+        return parent.get_child_ranges().restrict(request.user, 'view')
 
 
+    def get_extra_context(self, request, instance):
         return {
         return {
-            'table': table,
-            'permissions': permissions,
-            'bulk_querystring': bulk_querystring,
+            'bulk_querystring': f"vrf_id={instance.vrf.pk if instance.vrf else '0'}&parent={instance.prefix}",
             'active_tab': 'ip-ranges',
             'active_tab': 'ip-ranges',
         }
         }
 
 
 
 
-class PrefixIPAddressesView(generic.ObjectView):
+class PrefixIPAddressesView(generic.ObjectChildrenView):
     queryset = Prefix.objects.all()
     queryset = Prefix.objects.all()
+    child_model = IPAddress
+    table = tables.IPAddressTable
     template_name = 'ipam/prefix/ip_addresses.html'
     template_name = 'ipam/prefix/ip_addresses.html'
 
 
-    def get_extra_context(self, request, instance):
-        # Find all IPAddresses belonging to this Prefix
-        ipaddresses = instance.get_child_ips().restrict(request.user, 'view').prefetch_related('vrf')
-
-        # Add available IP addresses to the table if requested
-        if request.GET.get('show_available', 'true') == 'true':
-            ipaddresses = add_available_ipaddresses(instance.prefix, ipaddresses, instance.is_pool)
-
-        table = tables.IPAddressTable(ipaddresses, user=request.user)
-        if request.user.has_perm('ipam.change_ipaddress') or request.user.has_perm('ipam.delete_ipaddress'):
-            table.columns.show('pk')
-        paginate_table(table, request)
-
-        bulk_querystring = 'vrf_id={}&parent={}'.format(instance.vrf.pk if instance.vrf else '0', instance.prefix)
-
-        # Compile permissions list for rendering the object table
-        permissions = {
-            'change': request.user.has_perm('ipam.change_ipaddress'),
-            'delete': request.user.has_perm('ipam.delete_ipaddress'),
-        }
+    def get_children(self, request, parent):
+        return parent.get_child_ips().restrict(request.user, 'view')
 
 
+    def get_extra_context(self, request, instance):
         return {
         return {
-            'table': table,
-            'permissions': permissions,
-            'bulk_querystring': bulk_querystring,
+            'bulk_querystring': f"vrf_id={instance.vrf.pk if instance.vrf else '0'}&parent={instance.prefix}",
             'active_tab': 'ip-addresses',
             'active_tab': 'ip-addresses',
             'first_available_ip': instance.get_first_available_ip(),
             'first_available_ip': instance.get_first_available_ip(),
             'show_available': request.GET.get('show_available', 'true') == 'true',
             'show_available': request.GET.get('show_available', 'true') == 'true',