Enabled creation of device components

This commit is contained in:
Jeremy Stretch 2017-01-31 12:19:41 -05:00
parent 1fcc2b0029
commit e1cd846c9a
3 changed files with 44 additions and 11 deletions

View File

@ -330,6 +330,7 @@ class DeviceConsoleServerPortSerializer(serializers.HyperlinkedModelSerializer):
class Meta: class Meta:
model = ConsoleServerPort model = ConsoleServerPort
fields = ['id', 'url', 'name', 'connected_console'] fields = ['id', 'url', 'name', 'connected_console']
read_only_fields = ['connected_console']
# #
@ -351,6 +352,7 @@ class DeviceConsolePortSerializer(serializers.HyperlinkedModelSerializer):
class Meta: class Meta:
model = ConsolePort model = ConsolePort
fields = ['id', 'url', 'name', 'cs_port', 'connection_status'] fields = ['id', 'url', 'name', 'cs_port', 'connection_status']
read_only_fields = ['cs_port', 'connection_status']
# #
@ -371,6 +373,7 @@ class DevicePowerOutletSerializer(serializers.HyperlinkedModelSerializer):
class Meta: class Meta:
model = PowerOutlet model = PowerOutlet
fields = ['id', 'url', 'name', 'connected_port'] fields = ['id', 'url', 'name', 'connected_port']
read_only_fields = ['connected_port']
# #
@ -392,6 +395,7 @@ class DevicePowerPortSerializer(serializers.HyperlinkedModelSerializer):
class Meta: class Meta:
model = PowerPort model = PowerPort
fields = ['id', 'url', 'name', 'power_outlet', 'connection_status'] fields = ['id', 'url', 'name', 'power_outlet', 'connection_status']
read_only_fields = ['power_outlet', 'connection_status']
# #
@ -485,6 +489,7 @@ class DeviceDeviceBaySerializer(serializers.HyperlinkedModelSerializer):
class Meta: class Meta:
model = DeviceBay model = DeviceBay
fields = ['id', 'url', 'name', 'installed_device'] fields = ['id', 'url', 'name', 'installed_device']
read_only_fields = ['installed_device']
# #
@ -502,7 +507,8 @@ class ModuleSerializer(serializers.ModelSerializer):
class DeviceModuleSerializer(serializers.HyperlinkedModelSerializer): class DeviceModuleSerializer(serializers.HyperlinkedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:module-detail') url = serializers.HyperlinkedIdentityField(view_name='dcim-api:module-detail')
manufacturer = NestedManufacturerSerializer()
class Meta: class Meta:
model = Module model = Module
fields = ['id', 'url', 'parent', 'name', 'manufacturer', 'part_id', 'serial', 'discovered'] fields = ['id', 'url', 'name', 'manufacturer', 'part_id', 'serial', 'discovered']

View File

@ -179,13 +179,17 @@ class ConsolePortViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin
serializer_class = serializers.ConsolePortSerializer serializer_class = serializers.ConsolePortSerializer
class DeviceConsolePortViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet): class DeviceConsolePortViewSet(CreateModelMixin, ListModelMixin, GenericViewSet):
serializer_class = serializers.DeviceConsolePortSerializer serializer_class = serializers.DeviceConsolePortSerializer
def get_queryset(self): def get_queryset(self):
device = get_object_or_404(Device, pk=self.kwargs['pk']) device = get_object_or_404(Device, pk=self.kwargs['pk'])
return ConsolePort.objects.filter(device=device).select_related('cs_port') return ConsolePort.objects.filter(device=device).select_related('cs_port')
def perform_create(self, serializer):
device = get_object_or_404(Device, pk=self.kwargs['pk'])
serializer.save(device=device)
# #
# Console Server Ports # Console Server Ports
@ -197,13 +201,17 @@ class ConsoleServerPortViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyMode
serializer_class = serializers.ConsoleServerPortSerializer serializer_class = serializers.ConsoleServerPortSerializer
class DeviceConsoleServerPortViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet): class DeviceConsoleServerPortViewSet(CreateModelMixin, ListModelMixin, GenericViewSet):
serializer_class = serializers.DeviceConsoleServerPortSerializer serializer_class = serializers.DeviceConsoleServerPortSerializer
def get_queryset(self): def get_queryset(self):
device = get_object_or_404(Device, pk=self.kwargs['pk']) device = get_object_or_404(Device, pk=self.kwargs['pk'])
return ConsoleServerPort.objects.filter(device=device).select_related('connected_console') return ConsoleServerPort.objects.filter(device=device).select_related('connected_console')
def perform_create(self, serializer):
device = get_object_or_404(Device, pk=self.kwargs['pk'])
serializer.save(device=device)
# #
# Power Ports # Power Ports
@ -215,13 +223,17 @@ class PowerPortViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin,
serializer_class = serializers.PowerPortSerializer serializer_class = serializers.PowerPortSerializer
class DevicePowerPortViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet): class DevicePowerPortViewSet(CreateModelMixin, ListModelMixin, GenericViewSet):
serializer_class = serializers.DevicePowerPortSerializer serializer_class = serializers.DevicePowerPortSerializer
def get_queryset(self): def get_queryset(self):
device = get_object_or_404(Device, pk=self.kwargs['pk']) device = get_object_or_404(Device, pk=self.kwargs['pk'])
return PowerPort.objects.filter(device=device).select_related('power_outlet') return PowerPort.objects.filter(device=device).select_related('power_outlet')
def perform_create(self, serializer):
device = get_object_or_404(Device, pk=self.kwargs['pk'])
serializer.save(device=device)
# #
# Power Outlets # Power Outlets
@ -233,13 +245,17 @@ class PowerOutletViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin
serializer_class = serializers.PowerOutletSerializer serializer_class = serializers.PowerOutletSerializer
class DevicePowerOutletViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet): class DevicePowerOutletViewSet(CreateModelMixin, ListModelMixin, GenericViewSet):
serializer_class = serializers.DevicePowerOutletSerializer serializer_class = serializers.DevicePowerOutletSerializer
def get_queryset(self): def get_queryset(self):
device = get_object_or_404(Device, pk=self.kwargs['pk']) device = get_object_or_404(Device, pk=self.kwargs['pk'])
return PowerOutlet.objects.filter(device=device).select_related('connected_port') return PowerOutlet.objects.filter(device=device).select_related('connected_port')
def perform_create(self, serializer):
device = get_object_or_404(Device, pk=self.kwargs['pk'])
serializer.save(device=device)
# #
# Interfaces # Interfaces
@ -258,7 +274,7 @@ class InterfaceViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin,
return Response(serializer.data) return Response(serializer.data)
class DeviceInterfaceViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet): class DeviceInterfaceViewSet(CreateModelMixin, ListModelMixin, GenericViewSet):
serializer_class = serializers.DeviceInterfaceSerializer serializer_class = serializers.DeviceInterfaceSerializer
filter_class = filters.InterfaceFilter filter_class = filters.InterfaceFilter
@ -267,6 +283,10 @@ class DeviceInterfaceViewSet(CreateModelMixin, ListModelMixin, WritableSerialize
return Interface.objects.order_naturally(device.device_type.interface_ordering).filter(device=device)\ return Interface.objects.order_naturally(device.device_type.interface_ordering).filter(device=device)\
.select_related('connected_as_a', 'connected_as_b', 'circuit_termination') .select_related('connected_as_a', 'connected_as_b', 'circuit_termination')
def perform_create(self, serializer):
device = get_object_or_404(Device, pk=self.kwargs['pk'])
serializer.save(device=device)
# #
# Device bays # Device bays
@ -278,13 +298,17 @@ class DeviceBayViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin,
serializer_class = serializers.DeviceBaySerializer serializer_class = serializers.DeviceBaySerializer
class DeviceDeviceBayViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet): class DeviceDeviceBayViewSet(CreateModelMixin, ListModelMixin, GenericViewSet):
serializer_class = serializers.DeviceDeviceBaySerializer serializer_class = serializers.DeviceDeviceBaySerializer
def get_queryset(self): def get_queryset(self):
device = get_object_or_404(Device, pk=self.kwargs['pk']) device = get_object_or_404(Device, pk=self.kwargs['pk'])
return DeviceBay.objects.filter(device=device).select_related('installed_device') return DeviceBay.objects.filter(device=device).select_related('installed_device')
def perform_create(self, serializer):
device = get_object_or_404(Device, pk=self.kwargs['pk'])
serializer.save(device=device)
# #
# Modules # Modules
@ -295,13 +319,17 @@ class ModuleViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin, Wri
serializer_class = serializers.ModuleSerializer serializer_class = serializers.ModuleSerializer
class DeviceModuleViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet): class DeviceModuleViewSet(CreateModelMixin, ListModelMixin, GenericViewSet):
serializer_class = serializers.DeviceModuleSerializer serializer_class = serializers.DeviceModuleSerializer
def get_queryset(self): def get_queryset(self):
device = get_object_or_404(Device, pk=self.kwargs['pk']) device = get_object_or_404(Device, pk=self.kwargs['pk'])
return Module.objects.filter(device=device).select_related('device', 'manufacturer') return Module.objects.filter(device=device).select_related('device', 'manufacturer')
def perform_create(self, serializer):
device = get_object_or_404(Device, pk=self.kwargs['pk'])
serializer.save(device=device)
# #
# Interface connections # Interface connections

View File

@ -20,9 +20,8 @@ class WritableSerializerMixin(object):
class WritableSerializer(ModelSerializer): class WritableSerializer(ModelSerializer):
class Meta: class Meta(self.serializer_class.Meta):
model = self.get_queryset().model pass
fields = '__all__'
if self.action in WRITE_OPERATIONS: if self.action in WRITE_OPERATIONS:
return WritableSerializer return WritableSerializer