mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-14 01:41:22 -06:00

Made DeviceRoles hierarchical, had to also change the filtersets for Device, ConfigContext and VirtualMachine to use the TreeNodeMultipleChoiceFilter. Note: The model was changed to use NestedGroupModel, a side-effect of this is it also adds comments field, but I thought that was better then doing a one-off just for DeviceRole and having to define the fields, validators, etc.. - keeps everything DRY / consistent. * 18981 Make Device Roles Hierarchical * 18981 forms, serializer * 18981 fix tests * 18981 fix tests * 18981 fix tests * 18981 fix tests * 18981 fix tests * 18981 fix migration merge * 18981 fix tests * 18981 fix filtersets * 18981 fix tests * 18981 comments * 18981 review changes
105 lines
3.0 KiB
Python
105 lines
3.0 KiB
Python
from drf_spectacular.utils import extend_schema_serializer
|
|
from rest_framework import serializers
|
|
|
|
from netbox.api.serializers import WritableNestedSerializer
|
|
from dcim import models
|
|
|
|
__all__ = (
|
|
'NestedDeviceBaySerializer',
|
|
'NestedDeviceSerializer',
|
|
'NestedInterfaceSerializer',
|
|
'NestedInterfaceTemplateSerializer',
|
|
'NestedLocationSerializer',
|
|
'NestedModuleBaySerializer',
|
|
'NestedRegionSerializer',
|
|
'NestedSiteGroupSerializer',
|
|
)
|
|
|
|
|
|
@extend_schema_serializer(
|
|
exclude_fields=('site_count',),
|
|
)
|
|
class NestedRegionSerializer(WritableNestedSerializer):
|
|
site_count = serializers.IntegerField(read_only=True)
|
|
_depth = serializers.IntegerField(source='level', read_only=True)
|
|
|
|
class Meta:
|
|
model = models.Region
|
|
fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'site_count', '_depth']
|
|
|
|
|
|
@extend_schema_serializer(
|
|
exclude_fields=('site_count',),
|
|
)
|
|
class NestedSiteGroupSerializer(WritableNestedSerializer):
|
|
site_count = serializers.IntegerField(read_only=True)
|
|
_depth = serializers.IntegerField(source='level', read_only=True)
|
|
|
|
class Meta:
|
|
model = models.SiteGroup
|
|
fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'site_count', '_depth']
|
|
|
|
|
|
@extend_schema_serializer(
|
|
exclude_fields=('rack_count',),
|
|
)
|
|
class NestedLocationSerializer(WritableNestedSerializer):
|
|
rack_count = serializers.IntegerField(read_only=True)
|
|
_depth = serializers.IntegerField(source='level', read_only=True)
|
|
|
|
class Meta:
|
|
model = models.Location
|
|
fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'rack_count', '_depth']
|
|
|
|
|
|
class NestedDeviceRoleSerializer(WritableNestedSerializer):
|
|
|
|
class Meta:
|
|
model = models.DeviceRole
|
|
fields = ['id', 'url', 'display_url', 'display', 'name']
|
|
|
|
|
|
class NestedDeviceSerializer(WritableNestedSerializer):
|
|
|
|
class Meta:
|
|
model = models.Device
|
|
fields = ['id', 'url', 'display_url', 'display', 'name']
|
|
|
|
|
|
class NestedInterfaceSerializer(WritableNestedSerializer):
|
|
device = NestedDeviceSerializer(read_only=True)
|
|
_occupied = serializers.BooleanField(required=False, read_only=True)
|
|
|
|
class Meta:
|
|
model = models.Interface
|
|
fields = ['id', 'url', 'display_url', 'display', 'device', 'name', 'cable', '_occupied']
|
|
|
|
|
|
class NestedInterfaceTemplateSerializer(WritableNestedSerializer):
|
|
|
|
class Meta:
|
|
model = models.InterfaceTemplate
|
|
fields = ['id', 'url', 'display', 'name']
|
|
|
|
|
|
class NestedDeviceBaySerializer(WritableNestedSerializer):
|
|
device = NestedDeviceSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = models.DeviceBay
|
|
fields = ['id', 'url', 'display_url', 'display', 'device', 'name']
|
|
|
|
|
|
class ModuleBayNestedModuleSerializer(WritableNestedSerializer):
|
|
|
|
class Meta:
|
|
model = models.Module
|
|
fields = ['id', 'url', 'display_url', 'display', 'serial']
|
|
|
|
|
|
class NestedModuleBaySerializer(WritableNestedSerializer):
|
|
|
|
class Meta:
|
|
model = models.ModuleBay
|
|
fields = ['id', 'url', 'display_url', 'display', 'name']
|