diff --git a/netbox/dcim/api/serializers_/rackunits.py b/netbox/dcim/api/serializers_/rackunits.py index 1f53067185a..e65e04915d1 100644 --- a/netbox/dcim/api/serializers_/rackunits.py +++ b/netbox/dcim/api/serializers_/rackunits.py @@ -25,7 +25,12 @@ class RackUnitSerializer(serializers.Serializer): device = DeviceSerializer(nested=True, read_only=True) occupied = serializers.BooleanField(read_only=True) display = serializers.SerializerMethodField(read_only=True) + description = serializers.SerializerMethodField(read_only=True) @extend_schema_field(OpenApiTypes.STR) def get_display(self, obj): return obj['name'] + + @extend_schema_field(OpenApiTypes.STR) + def get_description(self, obj): + return f'{obj["device"]}' if obj['device'] else None diff --git a/netbox/dcim/tests/test_api.py b/netbox/dcim/tests/test_api.py index 1c4497e9abf..d57ea88aaf0 100644 --- a/netbox/dcim/tests/test_api.py +++ b/netbox/dcim/tests/test_api.py @@ -451,6 +451,34 @@ def test_get_rack_elevation(self): response = self.client.get(f'{url}?q=U10', **self.header) self.assertEqual(response.data['count'], 2) + def test_get_rack_elevation_description_is_occupying_device_name(self): + """ + Verify occupied rack units include the occupying device in their description. + """ + rack = Rack.objects.first() + self.add_permissions('dcim.view_rack', 'dcim.view_device') + url = reverse('dcim-api:rack-elevation', kwargs={'pk': rack.pk}) + + device = create_test_device( + name='Device A', + site=rack.site, + rack=rack, + position=40, + face=DeviceFaceChoices.FACE_FRONT, + ) + + # Retrieve all units + response = self.client.get(url, **self.header) + self.assertHttpStatus(response, status.HTTP_200_OK) + + occupied_unit = next(unit for unit in response.data['results'] if unit['name'] == 'U40') + self.assertEqual(occupied_unit['device']['id'], device.pk) + self.assertEqual(occupied_unit['description'], f'{device}') + + unoccupied_unit = next(unit for unit in response.data['results'] if unit['name'] == 'U39') + self.assertEqual(unoccupied_unit['device'], None) + self.assertEqual(unoccupied_unit['description'], None) + def test_get_rack_elevation_svg(self): """ GET a single rack elevation in SVG format.