diff --git a/src/account/serializers.py b/src/account/serializers.py index 852ea40f911cd63b5ca98380d7b4cb9e500afc96..0fc09ce35ff6942690618d57228f406313b134a8 100644 --- a/src/account/serializers.py +++ b/src/account/serializers.py @@ -127,31 +127,19 @@ class ProfileSerializer_Staff(serializers.ModelSerializer): class MonitoringSerializer(serializers.ModelSerializer): - full_name = serializers.SerializerMethodField() - email = serializers.SerializerMethodField() bits = serializers.SerializerMethodField() class Meta: model = models.Profile read_only_fields = ( 'id', - 'full_name', - 'email', 'bits', ) fields = ( 'id', - 'full_name', - 'email', 'bits', ) - def get_full_name(self, obj): - return obj.full_name - - def get_email(self, obj): - return obj.user.email - def get_bits(self, obj): if obj.homework_bits is None: return obj.events_visited diff --git a/src/account/urls.py b/src/account/urls.py index b46b1984b36192b6a3e6113fd5f0b29b836d8d3e..07e85fddebf48ed4fe6e582f6e2d9f493567af92 100644 --- a/src/account/urls.py +++ b/src/account/urls.py @@ -3,7 +3,15 @@ from . import views router = routers.DefaultRouter() -router.register(r'profiles', views.ProfileViewSet, base_name='profile') -router.register(r'monitoring/profiles', views.MonitorinViewSet, base_name='monitoring') +router.register( + r'profiles', + views.ProfileViewSet, + base_name='profile' +) +router.register( + r'monitoring/profiles', + views.MonitorinViewSet, + base_name='monitoring' +) urlpatterns = router.urls diff --git a/src/account/views.py b/src/account/views.py index b579b83b01af5f27fd9916eabe968527c94a4bbe..d3fe6df1d9541417f4596b9bde4ecabd27fe2c12 100644 --- a/src/account/views.py +++ b/src/account/views.py @@ -5,6 +5,8 @@ from rest_framework.decorators import action from common.permissions import IsSafeOrPatch from rest_framework_api_key.permissions import HasAPIKey +from django.db.models import Sum + from . import models from . import serializers @@ -16,6 +18,14 @@ class MonitorinViewSet(viewsets.ModelViewSet): def get_queryset(self): return models.Profile.objects.filter(role='Student') + @action(detail=False) + def totalbits(self, request): + profiles = models.Profile.objects.filter(role='Student') + bits = map(lambda item: serializers.MonitoringSerializer(item).data['bits'], profiles) + return Response({ + 'sum': sum(bits) + }) + class ProfileViewSet(viewsets.ModelViewSet): serializer_class = serializers.ProfileSerializer_User