Skip to content

Commit 6cb8b91

Browse files
authored
Closes #9396: Query modules by module bay & display installed_modules for module_bay REST API endpoint (#9574)
* Closes #9396 - Added ability to query modules by module bay & installed_modules for module bay REST API endpoint * Closes #9396 - Added ability to query modules by module bay & installed_modules for module bay REST API endpoint * Closes #9396 - Added ability to query modules by module bay & installed_modules for module bay REST API endpoint
1 parent 575e2c4 commit 6cb8b91

File tree

5 files changed

+23
-3
lines changed

5 files changed

+23
-3
lines changed

netbox/dcim/api/nested_serializers.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
__all__ = [
77
'ComponentNestedModuleSerializer',
8+
'ModuleBayNestedModuleSerializer',
89
'NestedCableSerializer',
910
'NestedConsolePortSerializer',
1011
'NestedConsolePortTemplateSerializer',
@@ -281,6 +282,14 @@ class Meta:
281282
fields = ['id', 'url', 'display', 'name']
282283

283284

285+
class ModuleBayNestedModuleSerializer(WritableNestedSerializer):
286+
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:module-detail')
287+
288+
class Meta:
289+
model = models.Module
290+
fields = ['id', 'url', 'display', 'serial']
291+
292+
284293
class ComponentNestedModuleSerializer(WritableNestedSerializer):
285294
"""
286295
Used by device component serializers.

netbox/dcim/api/serializers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -886,12 +886,12 @@ class Meta:
886886
class ModuleBaySerializer(NetBoxModelSerializer):
887887
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:modulebay-detail')
888888
device = NestedDeviceSerializer()
889-
# installed_module = NestedModuleSerializer(required=False, allow_null=True)
889+
installed_module = ModuleBayNestedModuleSerializer(required=False, allow_null=True)
890890

891891
class Meta:
892892
model = ModuleBay
893893
fields = [
894-
'id', 'url', 'display', 'device', 'name', 'label', 'position', 'description', 'tags', 'custom_fields',
894+
'id', 'url', 'display', 'device', 'name', 'installed_module', 'label', 'position', 'description', 'tags', 'custom_fields',
895895
'created', 'last_updated',
896896
]
897897

netbox/dcim/api/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -611,7 +611,7 @@ class RearPortViewSet(PassThroughPortMixin, NetBoxModelViewSet):
611611

612612

613613
class ModuleBayViewSet(NetBoxModelViewSet):
614-
queryset = ModuleBay.objects.prefetch_related('tags')
614+
queryset = ModuleBay.objects.prefetch_related('tags', 'installed_module')
615615
serializer_class = serializers.ModuleBaySerializer
616616
filterset_class = filtersets.ModuleBayFilterSet
617617
brief_prefetch_fields = ['device']

netbox/dcim/filtersets.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -992,6 +992,12 @@ class ModuleFilterSet(NetBoxModelFilterSet):
992992
to_field_name='model',
993993
label='Module type (model)',
994994
)
995+
module_bay_id = django_filters.ModelMultipleChoiceFilter(
996+
field_name='module_bay',
997+
queryset=ModuleBay.objects.all(),
998+
to_field_name='id',
999+
label='Module Bay (ID)'
1000+
)
9951001
device_id = django_filters.ModelMultipleChoiceFilter(
9961002
queryset=Device.objects.all(),
9971003
label='Device (ID)',

netbox/dcim/tests/test_filtersets.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1849,6 +1849,11 @@ def test_module_type(self):
18491849
params = {'module_type': [module_types[0].model, module_types[1].model]}
18501850
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6)
18511851

1852+
def test_module_bay(self):
1853+
module_bays = ModuleBay.objects.all()[:2]
1854+
params = {'module_bay_id': [module_bays[0].pk, module_bays[1].pk]}
1855+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
1856+
18521857
def test_device(self):
18531858
device_types = Device.objects.all()[:2]
18541859
params = {'device_id': [device_types[0].pk, device_types[1].pk]}

0 commit comments

Comments
 (0)