5959from import_export .resources import ModelResource
6060from student .models import Student
6161from student .admin import StudentAdmin
62+ import json
6263
6364
6465# Register your models here.
@@ -96,6 +97,22 @@ class CourseAdmin(ImportExportModelAdmin):
9697 date_hierarchy = 'start_day'
9798 raw_id_fields = ["teacher" , ]
9899
100+ def get_queryset (self , request ):
101+ queryset = super ().get_queryset (request )
102+ queryset = queryset .annotate (
103+ student_count = Count ("students" , distinct = True ),
104+ )
105+
106+ if request .user .is_superuser :
107+ queryset = Course .objects .all ().annotate (student_count = Count ("students" , distinct = True ), )
108+ else :
109+ try :
110+ queryset = Course .objects .filter (teacher = request .user .username ).annotate (
111+ student_count = Count ("students" , distinct = True ), )
112+ except :
113+ queryset = Course .objects .none ().annotate (student_count = Count ("students" , distinct = True ), )
114+ return queryset
115+
99116 def get_readonly_fields (self , request , obj = None ):
100117 if obj : # editing an existing object
101118 return self .readonly_fields + ['course_code' , ]
@@ -121,13 +138,6 @@ def children_display(self, obj):
121138
122139 children_display .short_description = "Students List"
123140
124- def get_queryset (self , request ):
125- queryset = super ().get_queryset (request )
126- queryset = queryset .annotate (
127- student_count = Count ("students" , distinct = True ),
128- )
129- return queryset
130-
131141 @staticmethod
132142 def student_count (obj ):
133143 # return obj.students.count()
@@ -306,6 +316,17 @@ class ScheduleAdmin(admin.ModelAdmin):
306316 list_per_page = 20
307317 raw_id_fields = ["course" , ]
308318
319+ def get_queryset (self , request ):
320+ queryset = super ().get_queryset (request )
321+ if request .user .is_superuser :
322+ queryset = Schedule .objects .all ()
323+ else :
324+ try :
325+ queryset = Schedule .objects .filter (course__teacher__username = request .user .username )
326+ except :
327+ queryset = Course .objects .none ()
328+ return queryset
329+
309330 @staticmethod
310331 def course_info (obj ):
311332 return obj .course .course_name + " - " + obj .course .course_code + ""
@@ -355,6 +376,17 @@ class AttendanceAdmin(admin.ModelAdmin):
355376 list_per_page = 20
356377 raw_id_fields = ["schedule_code" , "student" ]
357378
379+ def get_queryset (self , request ):
380+ queryset = super ().get_queryset (request )
381+ if request .user .is_superuser :
382+ queryset = Attendance .objects .all ()
383+ else :
384+ try :
385+ queryset = Attendance .objects .filter (schedule_code__course__teacher__username = request .user .username )
386+ except :
387+ queryset = Attendance .objects .none ()
388+ return queryset
389+
358390 # def get_readonly_fields(self, request, obj=None):
359391 # if obj: # editing an existing object
360392 # return self.readonly_fields + ('student_info', 'field2')
0 commit comments