Browse Source

Fixes #1189: Enforce consistent ordering of objects returned by a global search

Jeremy Stretch 8 years ago
parent
commit
f2846af4ec
1 changed files with 29 additions and 28 deletions
  1. 29 28
      netbox/netbox/views.py

+ 29 - 28
netbox/netbox/views.py

@@ -1,3 +1,4 @@
+from collections import OrderedDict
 import sys
 
 from rest_framework.views import APIView
@@ -27,91 +28,91 @@ from .forms import SearchForm
 
 
 SEARCH_MAX_RESULTS = 15
-SEARCH_TYPES = {
+SEARCH_TYPES = OrderedDict((
     # Circuits
-    'provider': {
+    ('provider', {
         'queryset': Provider.objects.all(),
         'filter': ProviderFilter,
         'table': ProviderSearchTable,
         'url': 'circuits:provider_list',
-    },
-    'circuit': {
+    }),
+    ('circuit', {
         'queryset': Circuit.objects.select_related('type', 'provider', 'tenant').prefetch_related('terminations__site'),
         'filter': CircuitFilter,
         'table': CircuitSearchTable,
         'url': 'circuits:circuit_list',
-    },
+    }),
     # DCIM
-    'site': {
+    ('site', {
         'queryset': Site.objects.select_related('region', 'tenant'),
         'filter': SiteFilter,
         'table': SiteSearchTable,
         'url': 'dcim:site_list',
-    },
-    'rack': {
+    }),
+    ('rack', {
         'queryset': Rack.objects.select_related('site', 'group', 'tenant', 'role'),
         'filter': RackFilter,
         'table': RackSearchTable,
         'url': 'dcim:rack_list',
-    },
-    'devicetype': {
+    }),
+    ('devicetype', {
         'queryset': DeviceType.objects.select_related('manufacturer'),
         'filter': DeviceTypeFilter,
         'table': DeviceTypeSearchTable,
         'url': 'dcim:devicetype_list',
-    },
-    'device': {
+    }),
+    ('device', {
         'queryset': Device.objects.select_related('device_type__manufacturer', 'device_role', 'tenant', 'site', 'rack'),
         'filter': DeviceFilter,
         'table': DeviceSearchTable,
         'url': 'dcim:device_list',
-    },
+    }),
     # IPAM
-    'vrf': {
+    ('vrf', {
         'queryset': VRF.objects.select_related('tenant'),
         'filter': VRFFilter,
         'table': VRFSearchTable,
         'url': 'ipam:vrf_list',
-    },
-    'aggregate': {
+    }),
+    ('aggregate', {
         'queryset': Aggregate.objects.select_related('rir'),
         'filter': AggregateFilter,
         'table': AggregateSearchTable,
         'url': 'ipam:aggregate_list',
-    },
-    'prefix': {
+    }),
+    ('prefix', {
         'queryset': Prefix.objects.select_related('site', 'vrf__tenant', 'tenant', 'vlan', 'role'),
         'filter': PrefixFilter,
         'table': PrefixSearchTable,
         'url': 'ipam:prefix_list',
-    },
-    'ipaddress': {
+    }),
+    ('ipaddress', {
         'queryset': IPAddress.objects.select_related('vrf__tenant', 'tenant', 'interface__device'),
         'filter': IPAddressFilter,
         'table': IPAddressSearchTable,
         'url': 'ipam:ipaddress_list',
-    },
-    'vlan': {
+    }),
+    ('vlan', {
         'queryset': VLAN.objects.select_related('site', 'group', 'tenant', 'role'),
         'filter': VLANFilter,
         'table': VLANSearchTable,
         'url': 'ipam:vlan_list',
-    },
+    }),
     # Secrets
-    'secret': {
+    ('secret', {
         'queryset': Secret.objects.select_related('role', 'device'),
         'filter': SecretFilter,
         'table': SecretSearchTable,
         'url': 'secrets:secret_list',
-    },
+    }),
     # Tenancy
-    'tenant': {
+    ('tenant', {
         'queryset': Tenant.objects.select_related('group'),
         'filter': TenantFilter,
         'table': TenantSearchTable,
         'url': 'tenancy:tenant_list',
-    },
-}
+    }),
+))
 
 
 def home(request):