-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore: more work on getting detail view working, notes
- Loading branch information
Showing
4 changed files
with
205 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,123 @@ | ||
from rest_framework.fields import empty | ||
from rest_framework.reverse import reverse | ||
from rest_framework import serializers | ||
|
||
from access.serializers.organization import OrganizationBaseSerializer | ||
|
||
|
||
from core.models.notes import Notes | ||
|
||
|
||
|
||
class NotesBaseSerializer(serializers.ModelSerializer): | ||
|
||
display_name = serializers.SerializerMethodField('get_display_name') | ||
|
||
def get_display_name(self, item): | ||
|
||
return str( item ) | ||
|
||
url = serializers.HyperlinkedIdentityField( | ||
view_name="API:_api_v2_device-detail", format="html" | ||
) | ||
|
||
class Meta: | ||
|
||
model = Notes | ||
|
||
fields = [ | ||
'id', | ||
'display_name', | ||
'name', | ||
'url', | ||
] | ||
|
||
read_only_fields = [ | ||
'id', | ||
'display_name', | ||
'name', | ||
'url', | ||
] | ||
|
||
|
||
class NotesModelSerializer(NotesBaseSerializer): | ||
|
||
|
||
# operating_system = OperatingSystemModelSerializer(source='id', many=False, read_only=False) | ||
|
||
_urls = serializers.SerializerMethodField('get_url') | ||
|
||
def get_url(self, item): | ||
|
||
return { | ||
'_self': reverse("API:_api_v2_device_notes-detail", | ||
request=self._context['view'].request, | ||
kwargs={'device_id': self._kwargs['context']['view'].kwargs['device_id'], 'pk': item.pk} | ||
), | ||
# 'history': 'ToDo', | ||
# 'notes': 'ToDo', | ||
# 'services': 'ToDo', | ||
# 'software': reverse("API:_api_v2_device_software-list", request=self._context['view'].request, kwargs={'device_id': item.pk}), | ||
# 'tickets': 'ToDo' | ||
} | ||
|
||
# rendered_config = serializers.SerializerMethodField('get_rendered_config') | ||
# rendered_config = serializers.JSONField(source='get_configuration') | ||
|
||
|
||
# def get_rendered_config(self, item): | ||
|
||
# return item.get_configuration(0) | ||
|
||
|
||
class Meta: | ||
|
||
model = Notes | ||
|
||
fields = '__all__' | ||
|
||
# fields = [ | ||
# 'id', | ||
# 'display_name', | ||
# 'name', | ||
# 'device_type', | ||
# # 'operating_system', | ||
# 'model_notes', | ||
# 'serial_number', | ||
# 'uuid', | ||
# 'is_global', | ||
# 'is_virtual', | ||
# 'device_model', | ||
# 'config', | ||
# 'rendered_config', | ||
# 'inventorydate', | ||
# 'created', | ||
# 'modified', | ||
# 'organization', | ||
# '_urls', | ||
# ] | ||
|
||
read_only_fields = [ | ||
'id', | ||
'display_name', | ||
'created', | ||
'modified', | ||
'_urls', | ||
] | ||
|
||
|
||
def __init__(self, instance=None, data=empty, **kwargs): | ||
|
||
super().__init__(instance=instance, data=data, **kwargs) | ||
|
||
# self.rendered_config = serializers.JSONField(initial=self.Meta.model.get_configuration(0)) | ||
|
||
|
||
|
||
class NotesViewSerializer(NotesModelSerializer): | ||
|
||
# device_model = DeviceModelBaseSerializer(many=False, read_only=True) | ||
|
||
# device_type = DeviceTypeBaseSerializer(many=False, read_only=True) | ||
|
||
organization = OrganizationBaseSerializer(many=False, read_only=True) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
from django.db.models import Q | ||
from django.shortcuts import get_object_or_404 | ||
|
||
from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiResponse | ||
|
||
from rest_framework import generics, viewsets | ||
from rest_framework.response import Response | ||
|
||
from access.mixin import OrganizationMixin | ||
|
||
from api.views.mixin import OrganizationPermissionAPI | ||
|
||
from core.serializers.notes import ( | ||
Notes, | ||
NotesModelSerializer as ModelSerializer, | ||
NotesViewSerializer as ViewSerializer | ||
) | ||
|
||
from api.v2.views.metadata import NavigationMetadata | ||
|
||
|
||
|
||
class ViewSet(OrganizationMixin, viewsets.ModelViewSet): | ||
|
||
filterset_fields = [ | ||
'device' | ||
] | ||
|
||
|
||
model = Notes | ||
|
||
metadata_class = NavigationMetadata | ||
|
||
permission_classes = [ | ||
OrganizationPermissionAPI | ||
] | ||
|
||
def get_serializer_class(self): | ||
|
||
if ( | ||
self.action == 'list' | ||
or self.action == 'retrieve' | ||
): | ||
|
||
return ViewSerializer | ||
|
||
|
||
return ModelSerializer | ||
|
||
|
||
def create(self, request, *args, **kwargs): | ||
|
||
return super().create(request, *args, **kwargs) | ||
|
||
|
||
def list(self, request, *args, **kwargs): | ||
|
||
return super().list(request, *args, **kwargs) | ||
|
||
|
||
def retrieve(self, request, *args, **kwargs): | ||
|
||
return super().retrieve(request, *args, **kwargs) | ||
|
||
|
||
def get_queryset(self): | ||
|
||
self.queryset = self.model.objects.filter(device_id=self.kwargs['device_id']).order_by('-created') | ||
|
||
return self.queryset | ||
|
||
def get_view_name(self): | ||
if self.detail: | ||
return "Device Note" | ||
|
||
return 'Device Notes' |