Bladeren bron

Fixes #8810: Enable filtering modules by type

jeremystretch 3 jaren geleden
bovenliggende
commit
07f2cdac58
3 gewijzigde bestanden met toevoegingen van 19 en 0 verwijderingen
  1. 1 0
      docs/release-notes/version-3.2.md
  2. 11 0
      netbox/dcim/filtersets.py
  3. 7 0
      netbox/dcim/tests/test_filtersets.py

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

@@ -159,6 +159,7 @@ Where it is desired to limit the range of available VLANs within a group, users
 * [#8764](https://github.com/netbox-community/netbox/issues/8764) - Correct view name resolution for dynamic form fields
 * [#8791](https://github.com/netbox-community/netbox/issues/8791) - Fix display of form validation failures during device component creation
 * [#8792](https://github.com/netbox-community/netbox/issues/8792) - Fix creation of circuit terminations via UI
+* [#8810](https://github.com/netbox-community/netbox/issues/8810) - Enable filtering modules by type
 * [#8815](https://github.com/netbox-community/netbox/issues/8815) - Fix display of custom object fields in table columns
 
 ### Other Changes

+ 11 - 0
netbox/dcim/filtersets.py

@@ -972,6 +972,17 @@ class ModuleFilterSet(NetBoxModelFilterSet):
         to_field_name='slug',
         label='Manufacturer (slug)',
     )
+    module_type_id = django_filters.ModelMultipleChoiceFilter(
+        field_name='module_type',
+        queryset=ModuleType.objects.all(),
+        label='Module type (ID)',
+    )
+    module_type = django_filters.ModelMultipleChoiceFilter(
+        field_name='module_type__model',
+        queryset=ModuleType.objects.all(),
+        to_field_name='model',
+        label='Module type (model)',
+    )
     device_id = django_filters.ModelMultipleChoiceFilter(
         queryset=Device.objects.all(),
         label='Device (ID)',

+ 7 - 0
netbox/dcim/tests/test_filtersets.py

@@ -1803,6 +1803,13 @@ class ModuleTestCase(TestCase, ChangeLoggedFilterSetTests):
         params = {'manufacturer': [manufacturers[0].slug, manufacturers[1].slug]}
         self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6)
 
+    def test_module_type(self):
+        module_types = ModuleType.objects.all()[:2]
+        params = {'module_type_id': [module_types[0].pk, module_types[1].pk]}
+        self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6)
+        params = {'module_type': [module_types[0].model, module_types[1].model]}
+        self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6)
+
     def test_device(self):
         device_types = Device.objects.all()[:2]
         params = {'device_id': [device_types[0].pk, device_types[1].pk]}