Explorar o código

Closes #984: Allow ordering circuits by A/Z side

Jeremy Stretch %!s(int64=6) %!d(string=hai) anos
pai
achega
6c3c6fba62
Modificáronse 3 ficheiros con 20 adicións e 15 borrados
  1. 8 0
      CHANGELOG.md
  2. 7 12
      netbox/circuits/tables.py
  3. 5 3
      netbox/circuits/views.py

+ 8 - 0
CHANGELOG.md

@@ -1,3 +1,11 @@
+v2.6.2 (FUTURE)
+
+## Enhancements
+
+* [#984](https://github.com/digitalocean/netbox/issues/984) - Allow ordering circuits by A/Z side
+
+---
+
 v2.6.1 (2019-06-25)
 
 ## Enhancements

+ 7 - 12
netbox/circuits/tables.py

@@ -20,15 +20,6 @@ STATUS_LABEL = """
 """
 
 
-class CircuitTerminationColumn(tables.Column):
-
-    def render(self, value):
-        return mark_safe('<a href="{}">{}</a>'.format(
-            value.site.get_absolute_url(),
-            value.site
-        ))
-
-
 #
 # Providers
 #
@@ -77,9 +68,13 @@ class CircuitTable(BaseTable):
     provider = tables.LinkColumn('circuits:provider', args=[Accessor('provider.slug')])
     status = tables.TemplateColumn(template_code=STATUS_LABEL, verbose_name='Status')
     tenant = tables.TemplateColumn(template_code=COL_TENANT)
-    termination_a = CircuitTerminationColumn(orderable=False, verbose_name='A Side')
-    termination_z = CircuitTerminationColumn(orderable=False, verbose_name='Z Side')
+    a_side = tables.Column(
+        verbose_name='A Side'
+    )
+    z_side = tables.Column(
+        verbose_name='Z Side'
+    )
 
     class Meta(BaseTable.Meta):
         model = Circuit
-        fields = ('pk', 'cid', 'status', 'type', 'provider', 'tenant', 'termination_a', 'termination_z', 'description')
+        fields = ('pk', 'cid', 'status', 'type', 'provider', 'tenant', 'a_side', 'z_side', 'description')

+ 5 - 3
netbox/circuits/views.py

@@ -1,11 +1,9 @@
-from django.conf import settings
 from django.contrib import messages
 from django.contrib.auth.decorators import permission_required
 from django.contrib.auth.mixins import PermissionRequiredMixin
 from django.db import transaction
-from django.db.models import Count
+from django.db.models import Count, OuterRef, Subquery
 from django.shortcuts import get_object_or_404, redirect, render
-from django.utils.decorators import method_decorator
 from django.views.generic import View
 
 from extras.models import Graph, GRAPH_TYPE_PROVIDER
@@ -135,10 +133,14 @@ class CircuitTypeBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 
 class CircuitListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'circuits.view_circuit'
+    _terminations = CircuitTermination.objects.filter(circuit=OuterRef('pk'))
     queryset = Circuit.objects.select_related(
         'provider', 'type', 'tenant'
     ).prefetch_related(
         'terminations__site'
+    ).annotate(
+        a_side=Subquery(_terminations.filter(term_side='A').values('site__name')[:1]),
+        z_side=Subquery(_terminations.filter(term_side='Z').values('site__name')[:1]),
     )
     filter = filters.CircuitFilter
     filter_form = forms.CircuitFilterForm