Explorar el Código

Fixes #3695: Include A/Z termination sites for circuits in global search

Jeremy Stretch hace 6 años
padre
commit
ae9d0d894a
Se han modificado 2 ficheros con 12 adiciones y 5 borrados
  1. 1 0
      docs/release-notes/version-2.6.md
  2. 11 5
      netbox/netbox/views.py

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

@@ -6,6 +6,7 @@
 
 ## Bug Fixes
 
+* [#3695](https://github.com/netbox-community/netbox/issues/3695) - Include A/Z termination sites for circuits in global search
 * [#3780](https://github.com/netbox-community/netbox/issues/3780) - Fix AttributeError exception in API docs
 
 ---

+ 11 - 5
netbox/netbox/views.py

@@ -1,6 +1,6 @@
 from collections import OrderedDict
 
-from django.db.models import Count, F
+from django.db.models import Count, F, OuterRef, Subquery
 from django.shortcuts import render
 from django.views.generic import View
 from rest_framework.response import Response
@@ -8,7 +8,7 @@ from rest_framework.reverse import reverse
 from rest_framework.views import APIView
 
 from circuits.filters import CircuitFilter, ProviderFilter
-from circuits.models import Circuit, Provider
+from circuits.models import Circuit, CircuitTermination, Provider
 from circuits.tables import CircuitTable, ProviderTable
 from dcim.filters import (
     CableFilter, DeviceFilter, DeviceTypeFilter, PowerFeedFilter, RackFilter, RackGroupFilter, SiteFilter,
@@ -49,9 +49,15 @@ SEARCH_TYPES = OrderedDict((
     ('circuit', {
         'permission': 'circuits.view_circuit',
         'queryset': Circuit.objects.prefetch_related(
-            'type', 'provider', 'tenant'
-        ).prefetch_related(
-            'terminations__site'
+            'type', 'provider', 'tenant', 'terminations__site'
+        ).annotate(
+            # Annotate A/Z terminations
+            a_side=Subquery(
+                CircuitTermination.objects.filter(circuit=OuterRef('pk')).filter(term_side='A').values('site__name')[:1]
+            ),
+            z_side=Subquery(
+                CircuitTermination.objects.filter(circuit=OuterRef('pk')).filter(term_side='Z').values('site__name')[:1]
+            ),
         ),
         'filter': CircuitFilter,
         'table': CircuitTable,