diff --git a/netbox/dcim/api/nested_serializers.py b/netbox/dcim/api/nested_serializers.py index 6aff1bdc9..155efc4bb 100644 --- a/netbox/dcim/api/nested_serializers.py +++ b/netbox/dcim/api/nested_serializers.py @@ -39,6 +39,7 @@ __all__ = [ 'NestedRackReservationSerializer', 'NestedRackRoleSerializer', 'NestedRackSerializer', + 'NestedRackTypeSerializer', 'NestedRearPortSerializer', 'NestedRearPortTemplateSerializer', 'NestedRegionSerializer', @@ -111,6 +112,13 @@ class NestedRackRoleSerializer(WritableNestedSerializer): fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'rack_count'] +class NestedRackTypeSerializer(WritableNestedSerializer): + + class Meta: + model = models.RackType + fields = ['id', 'url', 'display_url', 'display', 'name'] + + @extend_schema_serializer( exclude_fields=('device_count',), ) diff --git a/netbox/dcim/api/serializers_/racks.py b/netbox/dcim/api/serializers_/racks.py index d8d738001..64856d5cd 100644 --- a/netbox/dcim/api/serializers_/racks.py +++ b/netbox/dcim/api/serializers_/racks.py @@ -16,6 +16,7 @@ __all__ = ( 'RackReservationSerializer', 'RackRoleSerializer', 'RackSerializer', + 'RackTypeSerializer', ) @@ -33,6 +34,23 @@ class RackRoleSerializer(NetBoxModelSerializer): brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'rack_count') +class RackTypeSerializer(NetBoxModelSerializer): + type = ChoiceField(choices=RackTypeChoices, allow_blank=True, required=False, allow_null=True) + width = ChoiceField(choices=RackWidthChoices, required=False) + outer_unit = ChoiceField(choices=RackDimensionUnitChoices, allow_blank=True, required=False, allow_null=True) + weight_unit = ChoiceField(choices=WeightUnitChoices, allow_blank=True, required=False, allow_null=True) + + class Meta: + model = Rack + fields = [ + 'id', 'url', 'display_url', 'display', 'name', + 'type', 'width', 'u_height', 'starting_unit', 'weight', 'max_weight', + 'weight_unit', 'desc_units', 'outer_width', 'outer_depth', 'outer_unit', 'mounting_depth', 'description', + 'comments', 'tags', 'custom_fields', 'created', 'last_updated', + ] + brief_fields = ('id', 'url', 'display', 'name', 'description') + + class RackSerializer(NetBoxModelSerializer): site = SiteSerializer(nested=True) location = LocationSerializer(nested=True, required=False, allow_null=True, default=None) diff --git a/netbox/dcim/api/urls.py b/netbox/dcim/api/urls.py index 36a0c99a5..96f63390d 100644 --- a/netbox/dcim/api/urls.py +++ b/netbox/dcim/api/urls.py @@ -15,6 +15,7 @@ router.register('locations', views.LocationViewSet) router.register('rack-roles', views.RackRoleViewSet) router.register('racks', views.RackViewSet) router.register('rack-reservations', views.RackReservationViewSet) +router.register('rack-types', views.RackTypeViewSet) # Device/module types router.register('manufacturers', views.ManufacturerViewSet) diff --git a/netbox/dcim/api/views.py b/netbox/dcim/api/views.py index be7a9c306..87aa7535c 100644 --- a/netbox/dcim/api/views.py +++ b/netbox/dcim/api/views.py @@ -161,6 +161,16 @@ class RackRoleViewSet(NetBoxModelViewSet): filterset_class = filtersets.RackRoleFilterSet +# +# Rack Types +# + +class RackTypeViewSet(NetBoxModelViewSet): + queryset = RackType.objects.all() + serializer_class = serializers.RackTypeSerializer + filterset_class = filtersets.RackTypeFilterSet + + # # Racks #