From 83ab4dffbe0b92d33b84763d09a1e12f8ebfe011 Mon Sep 17 00:00:00 2001 From: Tanner Collin Date: Wed, 15 Jan 2020 06:25:01 +0000 Subject: [PATCH] Add shortcuts for viewset mixins --- apiserver/apiserver/api/serializers.py | 6 +++--- apiserver/apiserver/api/views.py | 29 +++++++++++--------------- 2 files changed, 15 insertions(+), 20 deletions(-) diff --git a/apiserver/apiserver/api/serializers.py b/apiserver/apiserver/api/serializers.py index 1285da1..e131037 100644 --- a/apiserver/apiserver/api/serializers.py +++ b/apiserver/apiserver/api/serializers.py @@ -221,13 +221,13 @@ class SessionListSerializer(SessionSerializer): class CourseSerializer(serializers.ModelSerializer): name = serializers.CharField() - description = serializers.CharField() + description = serializers.CharField(write_only=True) class Meta: model = models.Course - fields = '__all__' + fields = ['id', 'name', 'description'] class CourseDetailSerializer(serializers.ModelSerializer): - sessions = SessionListSerializer(many=True) + sessions = SessionListSerializer(many=True, read_only=True) class Meta: model = models.Course diff --git a/apiserver/apiserver/api/views.py b/apiserver/apiserver/api/views.py index eafe350..e3e4b1a 100644 --- a/apiserver/apiserver/api/views.py +++ b/apiserver/apiserver/api/views.py @@ -39,18 +39,13 @@ class IsInstructorOrReadOnly(BasePermission): -class RetrieveUpdateViewSet( - viewsets.GenericViewSet, - mixins.RetrieveModelMixin, - mixins.UpdateModelMixin): - def list(self, request): - return Response([]) +Base = viewsets.GenericViewSet +List = mixins.ListModelMixin +Retrieve = mixins.RetrieveModelMixin +Create = mixins.CreateModelMixin +Update = mixins.UpdateModelMixin +Destroy = mixins.DestroyModelMixin -class CreateRetrieveUpdateDeleteViewSet( - RetrieveUpdateViewSet, - mixins.CreateModelMixin, - mixins.DestroyModelMixin): - pass search_strings = {} @@ -117,7 +112,7 @@ class SearchViewSet(viewsets.GenericViewSet, mixins.RetrieveModelMixin): return Response({'seq': seq, 'results': serializer.data}) -class MemberViewSet(RetrieveUpdateViewSet): +class MemberViewSet(Base, Retrieve, Update): permission_classes = [AllowMetadata | IsAuthenticated, IsOwnerOrAdmin] queryset = models.Member.objects.all() @@ -128,21 +123,21 @@ class MemberViewSet(RetrieveUpdateViewSet): return serializers.MemberSerializer -class CardViewSet(CreateRetrieveUpdateDeleteViewSet): +class CardViewSet(Base, Create, Retrieve, Update, Destroy): permission_classes = [AllowMetadata | IsAuthenticated, IsOwnerOrAdmin, IsAdminOrReadOnly] queryset = models.Card.objects.all() serializer_class = serializers.CardSerializer -class CourseViewSet(viewsets.ModelViewSet): +class CourseViewSet(Base, List, Retrieve, Create, Update): permission_classes = [AllowMetadata | IsAuthenticated, IsAdminOrReadOnly | IsInstructorOrReadOnly] queryset = models.Course.objects.annotate(date=Max('sessions__datetime')).order_by('-date') def get_serializer_class(self): - if self.action == 'retrieve': - return serializers.CourseDetailSerializer - else: + if self.action == 'list': return serializers.CourseSerializer + else: + return serializers.CourseDetailSerializer class SessionViewSet(viewsets.ModelViewSet):