from django.contrib import admin from courses.models import UserGrade, UserGradeSummary, UserProfile, Course class UserGradeInline(admin.TabularInline): model = UserGrade ordering = ['game'] extra = 0 class UserGradeSummaryInline(admin.TabularInline): model = UserGradeSummary ordering = ['game'] extra = 0 class UserProfileAdmin(admin.ModelAdmin): inlines = [UserGradeSummaryInline, UserGradeInline] def queryset(self, request): """ Allows instructors to only see students of their courses. Admin sees all. """ qs = super(UserProfileAdmin, self).queryset(request) if request.user.is_superuser: return qs elif request.user.is_staff: return qs.filter(user__studentships__instructors=request.user) class StudentInline(admin.TabularInline): model = Course.students.through class UserProfileInlineAdmin(admin.TabularInline): model = UserProfile extra = 3 class CourseAdmin(admin.ModelAdmin): inlines = [StudentInline] def queryset(self, request): """ Filter only courses that request user is instructor of. Admin sees all. """ qs = super(CourseAdmin, self).queryset(request) if request.user.is_superuser: return qs elif request.user.is_staff: return qs.filter(instructors=request.user) else: return qs admin.site.register(Course, CourseAdmin) admin.site.register(UserProfile, UserProfileAdmin)