Merge pull request #605 from MITx/feature/prefetch_user_groups
Reduce # of queries for auth checks on Progress page by prefetching user groups
This commit is contained in:
@@ -321,7 +321,7 @@ def _has_staff_access_to_location(user, location):
|
||||
return True
|
||||
|
||||
# If not global staff, is the user in the Auth group for this class?
|
||||
user_groups = [x[1] for x in user.groups.values_list()]
|
||||
user_groups = [g.name for g in user.groups.all()]
|
||||
staff_group = _course_staff_group_name(location)
|
||||
if staff_group in user_groups:
|
||||
debug("Allow: user in group %s", staff_group)
|
||||
|
||||
@@ -328,6 +328,10 @@ def progress(request, course_id, student_id=None):
|
||||
# NOTE: To make sure impersonation by instructor works, use
|
||||
# student instead of request.user in the rest of the function.
|
||||
|
||||
# The pre-fetching of groups is done to make auth checks not require an
|
||||
# additional DB lookup (this kills the Progress page in particular).
|
||||
student = User.objects.prefetch_related("groups").get(id=student.id)
|
||||
|
||||
student_module_cache = StudentModuleCache.cache_for_descriptor_descendents(
|
||||
course_id, student, course)
|
||||
course_module = get_module(student, request, course.location,
|
||||
|
||||
Reference in New Issue
Block a user