fix(itim): Correct Device Service API v2 endpoint

ref: #248 #356
This commit is contained in:
2024-10-21 16:15:49 +09:30
parent cf31f198c8
commit d945092153
2 changed files with 60 additions and 16 deletions

View File

@ -1,14 +1,15 @@
from rest_framework.reverse import reverse
from rest_framework.fields import empty
from rest_framework import serializers
from rest_framework.reverse import reverse
from access.serializers.organization import OrganizationBaseSerializer
from itam.serializers.device import DeviceBaseSerializer
from itim.serializers.cluster import ClusterBaseSerializer
from itim.serializers.port import PortBaseSerializer
from itim.models.services import Service
from itam.serializers.device import Device, DeviceBaseSerializer
class ServiceBaseSerializer(serializers.ModelSerializer):
@ -101,6 +102,35 @@ class ServiceModelSerializer(ServiceBaseSerializer):
]
def get_field_names(self, declared_fields, info):
if 'view' in self._context:
if 'device_id' in self._context['view'].kwargs:
self.Meta.read_only_fields += [ 'cluster', 'device', 'organization', 'is_global' ]
fields = super().get_field_names(declared_fields, info)
return fields
def is_valid(self, *, raise_exception=False):
is_valid = super().is_valid(raise_exception=raise_exception)
if 'view' in self._context:
if 'device_id' in self._context['view'].kwargs:
device = Device.objects.get( id = self._context['view'].kwargs['device_id'] )
self.validated_data['device'] = device
self.validated_data['organization'] = device.organization
return is_valid
class ServiceViewSerializer(ServiceModelSerializer):

View File

@ -1,9 +1,14 @@
from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiResponse
from itim.serializers.service import Service, ServiceModelSerializer, ServiceViewSerializer
from api.viewsets.common import ModelViewSet
from itim.serializers.service import (
Service,
ServiceModelSerializer,
ServiceViewSerializer
)
@extend_schema_view(
list=extend_schema(exclude=True),
@ -15,9 +20,29 @@ from api.viewsets.common import ModelViewSet
)
class ViewSet(ModelViewSet):
filterset_fields = [
'cluster',
'port',
]
search_fields = [
'name',
]
model = Service
def get_queryset(self):
queryset = super().get_queryset()
queryset = queryset.filter(device_id=self.kwargs['device_id'])
self.queryset = queryset
return self.queryset
def get_serializer_class(self):
if (
@ -29,14 +54,3 @@ class ViewSet(ModelViewSet):
return globals()[str( self.model._meta.verbose_name).replace(' ', '') + 'ModelSerializer']
def get_queryset(self):
queryset = super().queryset()
queryset = queryset.filter(device_id=self.kwargs['device_id'])
self.queryset = queryset
return self.queryset