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:
Calen Pennington
2012-08-31 13:06:49 -07:00
2 changed files with 5 additions and 1 deletions

View File

@@ -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)

View File

@@ -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,