diff --git a/docs/release-notes/version-2.6.md b/docs/release-notes/version-2.6.md index 67da3b7e2..5d5eb00df 100644 --- a/docs/release-notes/version-2.6.md +++ b/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 --- diff --git a/netbox/netbox/views.py b/netbox/netbox/views.py index 5dee6cade..da5fec24e 100644 --- a/netbox/netbox/views.py +++ b/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,