1- from rest_framework import viewsets
2- from academics .models import Marks , Attendance
1+ from rest_framework .decorators import api_view
2+ from rest_framework import viewsets , status
3+ from academics .models import Marks , Attendance , Branch
34from academics .serializers import MarksSerializer , AttendanceSerializer
5+ from rest_framework .response import Response
46from django .shortcuts import get_object_or_404
57from core .permissions import isAdmin , isStaff , isOwner
68
79
10+ @api_view (['GET' ])
11+ def get_branch_names (request ):
12+ branches = Branch .objects .all ()
13+ branches = [(branch .code , branch .name ) for branch in branches ]
14+ return Response (branches , status .HTTP_200_OK )
15+
16+
817class MarksViewSet (viewsets .ModelViewSet ):
918 queryset = Marks .objects .all ()
1019 serializer_class = MarksSerializer
1120 lookup_fields = ('student_id' , 'subject_id' )
1221
1322
23+ def list (self , request , * args , ** kwargs ):
24+ serializer = self .get_serializer (data = request .GET , partial = True )
25+
26+ if serializer .is_valid ():
27+ student = serializer .validated_data .get ('student' , {}).get ('user' , {}).get ('id' )
28+ subject = serializer .validated_data .get ('subject' , {}).get ('code' )
29+
30+ queryset = self .filter_queryset (self .get_queryset ())
31+ if student : queryset = queryset .filter (student = student )
32+ if subject : queryset = queryset .filter (subject = subject )
33+
34+ page = self .paginate_queryset (queryset )
35+ if page is not None :
36+ serializer = self .get_serializer (page , many = True )
37+ return self .get_paginated_response (serializer .data )
38+
39+ serializer = self .get_serializer (queryset , many = True )
40+ return Response (serializer .data )
41+
42+ else : return super ().list (request , * args , ** kwargs )
43+
44+
1445 def get_object (self ):
1546 queryset = self .filter_queryset (self .get_queryset ())
1647
@@ -31,6 +62,28 @@ class AttendanceViewSet(viewsets.ModelViewSet):
3162 lookup_fields = ('student_id' , 'subject_id' )
3263
3364
65+ def list (self , request , * args , ** kwargs ):
66+ serializer = self .get_serializer (data = request .GET , partial = True )
67+
68+ if serializer .is_valid ():
69+ student = serializer .validated_data .get ('student' , {}).get ('user' , {}).get ('id' )
70+ subject = serializer .validated_data .get ('subject' , {}).get ('code' )
71+
72+ queryset = self .filter_queryset (self .get_queryset ())
73+ if student : queryset = queryset .filter (student = student )
74+ if subject : queryset = queryset .filter (subject = subject )
75+
76+ page = self .paginate_queryset (queryset )
77+ if page is not None :
78+ serializer = self .get_serializer (page , many = True )
79+ return self .get_paginated_response (serializer .data )
80+
81+ serializer = self .get_serializer (queryset , many = True )
82+ return Response (serializer .data )
83+
84+ else : return super ().list (request , * args , ** kwargs )
85+
86+
3487 def get_object (self ):
3588 queryset = self .filter_queryset (self .get_queryset ())
3689
0 commit comments