Jeremy Stretch 1 год назад
Родитель
Сommit
5cb7af88d4

+ 10 - 0
netbox/dcim/filtersets.py

@@ -1004,6 +1004,11 @@ class DeviceFilterSet(
         queryset=Rack.objects.all(),
         label=_('Rack (ID)'),
     )
+    parent_bay_id = django_filters.ModelMultipleChoiceFilter(
+        field_name='parent_bay',
+        queryset=DeviceBay.objects.all(),
+        label=_('Parent bay (ID)'),
+    )
     cluster_id = django_filters.ModelMultipleChoiceFilter(
         queryset=Cluster.objects.all(),
         label=_('VM cluster (ID)'),
@@ -1695,6 +1700,11 @@ class RearPortFilterSet(
 
 
 class ModuleBayFilterSet(DeviceComponentFilterSet, NetBoxModelFilterSet):
+    installed_module_id = django_filters.ModelMultipleChoiceFilter(
+        field_name='installed_module',
+        queryset=ModuleBay.objects.all(),
+        label=_('Installed module (ID)'),
+    )
 
     class Meta:
         model = ModuleBay

+ 1 - 1
netbox/dcim/tests/test_filtersets.py

@@ -1884,7 +1884,7 @@ class PlatformTestCase(TestCase, ChangeLoggedFilterSetTests):
 class DeviceTestCase(TestCase, ChangeLoggedFilterSetTests):
     queryset = Device.objects.all()
     filterset = DeviceFilterSet
-    ignore_fields = ('primary_ip4', 'primary_ip6', 'oob_ip', 'local_context_data')
+    ignore_fields = ('local_context_data', 'oob_ip', 'primary_ip4', 'primary_ip6', 'vc_master_for')
 
     @classmethod
     def setUpTestData(cls):

+ 8 - 3
netbox/ipam/filtersets.py

@@ -849,7 +849,7 @@ class VLANGroupFilterSet(OrganizationalModelFilterSet):
     region = django_filters.NumberFilter(
         method='filter_scope'
     )
-    sitegroup = django_filters.NumberFilter(
+    site_group = django_filters.NumberFilter(
         method='filter_scope'
     )
     site = django_filters.NumberFilter(
@@ -861,13 +861,17 @@ class VLANGroupFilterSet(OrganizationalModelFilterSet):
     rack = django_filters.NumberFilter(
         method='filter_scope'
     )
-    clustergroup = django_filters.NumberFilter(
+    cluster_group = django_filters.NumberFilter(
         method='filter_scope'
     )
     cluster = django_filters.NumberFilter(
         method='filter_scope'
     )
 
+    # TODO: Remove in v4.1
+    sitegroup = site_group
+    clustergroup = cluster_group
+
     class Meta:
         model = VLANGroup
         fields = ['id', 'name', 'slug', 'min_vid', 'max_vid', 'description', 'scope_id']
@@ -882,8 +886,9 @@ class VLANGroupFilterSet(OrganizationalModelFilterSet):
         return queryset.filter(qs_filter)
 
     def filter_scope(self, queryset, name, value):
+        model_name = name.replace('_', '')
         return queryset.filter(
-            scope_type=ContentType.objects.get(model=name),
+            scope_type=ContentType.objects.get(model=model_name),
             scope_id=value
         )
 

+ 1 - 0
netbox/ipam/tests/test_filtersets.py

@@ -922,6 +922,7 @@ class IPRangeTestCase(TestCase, ChangeLoggedFilterSetTests):
 class IPAddressTestCase(TestCase, ChangeLoggedFilterSetTests):
     queryset = IPAddress.objects.all()
     filterset = IPAddressFilterSet
+    ignore_fields = ('fhrpgroup',)
 
     @classmethod
     def setUpTestData(cls):

+ 1 - 1
netbox/users/tests/test_filtersets.py

@@ -15,7 +15,7 @@ User = get_user_model()
 class UserTestCase(TestCase, BaseFilterSetTests):
     queryset = User.objects.all()
     filterset = filtersets.UserFilterSet
-    ignore_fields = ('password',)
+    ignore_fields = ('config', 'dashboard', 'password')
 
     @classmethod
     def setUpTestData(cls):

+ 5 - 1
netbox/utilities/testing/filtersets.py

@@ -106,7 +106,11 @@ class BaseFilterSetTests:
 
             # All other fields
             else:
-                self.assertIn(model_field.name, filterset_fields, f'No filter found for {model_field.name}!')
+                self.assertIn(
+                    model_field.name,
+                    filterset_fields,
+                    f'No filter found for {model_field.name} ({type(model_field)})!'
+                )
 
 
 class ChangeLoggedFilterSetTests(BaseFilterSetTests):