瀏覽代碼

Merge pull request #4244 from netbox-community/4230-filter_rack_unit_on_elevations

Fixes: #4230 - Fixes rack units filtering on elevation endpoint
Daniel Sheppard 6 年之前
父節點
當前提交
d0c82c23bd
共有 3 個文件被更改,包括 31 次插入0 次删除
  1. 4 0
      netbox/dcim/api/serializers.py
  2. 5 0
      netbox/dcim/api/views.py
  3. 22 0
      netbox/dcim/tests/test_api.py

+ 4 - 0
netbox/dcim/api/serializers.py

@@ -172,6 +172,10 @@ class RackReservationSerializer(ValidatedModelSerializer):
 
 
 class RackElevationDetailFilterSerializer(serializers.Serializer):
+    q = serializers.CharField(
+        required=False,
+        default=None
+    )
     face = serializers.ChoiceField(
         choices=DeviceFaceChoices,
         default=DeviceFaceChoices.FACE_FRONT

+ 5 - 0
netbox/dcim/api/views.py

@@ -237,6 +237,11 @@ class RackViewSet(CustomFieldModelViewSet):
                 expand_devices=data['expand_devices']
             )
 
+            # Enable filtering rack units by ID
+            q = data['q']
+            if q:
+                elevation = [u for u in elevation if q in str(u['id']) or q in str(u['name'])]
+
             page = self.paginate_queryset(elevation)
             if page is not None:
                 rack_units = serializers.RackUnitSerializer(page, many=True, context={'request': request})

+ 22 - 0
netbox/dcim/tests/test_api.py

@@ -596,6 +596,28 @@ class RackTest(APITestCase):
 
         self.assertEqual(response.data['count'], 42)
 
+    def test_get_elevation_rack_units(self):
+
+        url = '{}?q=3'.format(reverse('dcim-api:rack-elevation', kwargs={'pk': self.rack1.pk}))
+        response = self.client.get(url, **self.header)
+
+        self.assertEqual(response.data['count'], 13)
+
+        url = '{}?q=U3'.format(reverse('dcim-api:rack-elevation', kwargs={'pk': self.rack1.pk}))
+        response = self.client.get(url, **self.header)
+
+        self.assertEqual(response.data['count'], 11)
+
+        url = '{}?q=10'.format(reverse('dcim-api:rack-elevation', kwargs={'pk': self.rack1.pk}))
+        response = self.client.get(url, **self.header)
+
+        self.assertEqual(response.data['count'], 1)
+
+        url = '{}?q=U20'.format(reverse('dcim-api:rack-elevation', kwargs={'pk': self.rack1.pk}))
+        response = self.client.get(url, **self.header)
+
+        self.assertEqual(response.data['count'], 1)
+
     def test_get_rack_elevation(self):
 
         url = reverse('dcim-api:rack-elevation', kwargs={'pk': self.rack1.pk})