diff --git a/core/serializers/subscription.py b/core/serializers/subscription.py index adf3a54aff28a439fd0b4bec67d485c4395d3336..6509c7546196635f614ef9a6b19a4aa3f0f1f2ca 100644 --- a/core/serializers/subscription.py +++ b/core/serializers/subscription.py @@ -47,10 +47,7 @@ class SubscriptionSerializer(DynamicFieldsModelSerializer): available = serializers.SerializerMethodField() def get_assignments(self, subscription): - queryset = TutorSubmissionAssignment.objects.filter( - subscription=subscription, - is_done=False - ) + queryset = subscription.assignments.filter(is_done=False) serializer = AssignmentDetailSerializer(queryset, many=True) return serializer.data diff --git a/core/views/common_views.py b/core/views/common_views.py index cb109ffc6bd344ceedd8efcea646511ab49311b8..8aed85b1e5e90870d6e1cd5412f25921cd85c8da 100644 --- a/core/views/common_views.py +++ b/core/views/common_views.py @@ -54,7 +54,13 @@ class StudentSelfSubmissionsApiView(generics.ListAPIView): class StudentReviewerApiViewSet(viewsets.ReadOnlyModelViewSet): """ Gets a list of all students without individual submissions """ permission_classes = (IsReviewer,) - queryset = StudentInfo.objects.all() + queryset = StudentInfo.objects\ + .select_related('user')\ + .select_related('exam')\ + .prefetch_related('submissions')\ + .prefetch_related('submissions__feedback')\ + .prefetch_related('submissions__type')\ + .all() serializer_class = StudentInfoSerializerForListView diff --git a/core/views/feedback.py b/core/views/feedback.py index 1eb11a056e7f8fae24044e8616358cec9ca2b907..6735d1677cb50ad693a630b030ad1a827771adc0 100644 --- a/core/views/feedback.py +++ b/core/views/feedback.py @@ -16,7 +16,10 @@ class FeedbackApiView( viewsets.GenericViewSet): """ Gets a list of an individual exam by Id if provided """ permission_classes = (permissions.IsTutorOrReviewer,) - queryset = models.Feedback.objects.all() + queryset = models.Feedback.objects\ + .select_related('of_submission')\ + .select_related('of_submission__type')\ + .all() serializer_class = serializers.FeedbackSerializer lookup_field = 'of_submission__pk' lookup_url_kwarg = 'submission_pk' @@ -69,10 +72,10 @@ class FeedbackApiView( def get_queryset(self): if self.request.user.is_reviewer(): - return models.Feedback.objects.all() + return self.queryset.all() else: # only return feedback that the requesting user has worked on - return models.Feedback.objects.filter( + return self.queryset.filter( of_submission__assignments__subscription__owner=self.request.user # noqa ) diff --git a/core/views/subscription.py b/core/views/subscription.py index 2e00c5cac40596eeb3359b42dc159e70639e90bf..25ebafb9f5f685e6c340aba4b788b719dcd75375 100644 --- a/core/views/subscription.py +++ b/core/views/subscription.py @@ -20,9 +20,12 @@ class SubscriptionApiViewSet( viewsets.GenericViewSet): permission_classes = (permissions.IsTutorOrReviewer,) serializer_class = serializers.SubscriptionSerializer + queryset = models.SubmissionSubscription.objects\ + .prefetch_related('assignments')\ + .select_related('owner') def get_queryset(self): - return models.SubmissionSubscription.objects.filter( + return self.queryset.filter( owner=self.request.user, deactivated=False )