Add shortcuts for viewset mixins

master
Tanner Collin 4 years ago
parent 9617d9776b
commit 83ab4dffbe
  1. 6
      apiserver/apiserver/api/serializers.py
  2. 29
      apiserver/apiserver/api/views.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

@ -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):

Loading…
Cancel
Save