From ae9d0d894a20ecb2f8650fc1a0401b2aa4815035 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 27 Dec 2019 14:04:03 -0500 Subject: [PATCH] Fixes #3695: Include A/Z termination sites for circuits in global search --- docs/release-notes/version-2.6.md | 1 + netbox/netbox/views.py | 16 +++++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) 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,