Commit 36443163 by Calen Pennington

Force instantiation of the user before querying

Without accessing .pk, it's possible for the user object to still be a
SimpleLazyObject, which breaks Django's query engine

http://stackoverflow.com/questions/11875737/django-filtering-drafts-by-user-causes-error
parent f7700dfc
...@@ -121,7 +121,7 @@ class ModelDataCache(object): ...@@ -121,7 +121,7 @@ class ModelDataCache(object):
'module_state_key__in', 'module_state_key__in',
(descriptor.location.url() for descriptor in self.descriptors), (descriptor.location.url() for descriptor in self.descriptors),
course_id=self.course_id, course_id=self.course_id,
student=self.user, student=self.user.pk,
) )
elif scope == Scope.content: elif scope == Scope.content:
return self._chunked_query( return self._chunked_query(
...@@ -145,13 +145,13 @@ class ModelDataCache(object): ...@@ -145,13 +145,13 @@ class ModelDataCache(object):
XModuleStudentPrefsField, XModuleStudentPrefsField,
'module_type__in', 'module_type__in',
set(descriptor.location.category for descriptor in self.descriptors), set(descriptor.location.category for descriptor in self.descriptors),
student=self.user, student=self.user.pk,
field_name__in=set(field.name for field in fields), field_name__in=set(field.name for field in fields),
) )
elif scope == Scope.student_info: elif scope == Scope.student_info:
return self._query( return self._query(
XModuleStudentInfoField, XModuleStudentInfoField,
student=self.user, student=self.user.pk,
field_name__in=set(field.name for field in fields), field_name__in=set(field.name for field in fields),
) )
else: else:
...@@ -214,7 +214,7 @@ class ModelDataCache(object): ...@@ -214,7 +214,7 @@ class ModelDataCache(object):
if key.scope == Scope.student_state: if key.scope == Scope.student_state:
field_object, _ = StudentModule.objects.get_or_create( field_object, _ = StudentModule.objects.get_or_create(
course_id=self.course_id, course_id=self.course_id,
student=self.user, student=self.user.pk,
module_type=key.block_scope_id.category, module_type=key.block_scope_id.category,
module_state_key=key.block_scope_id.url(), module_state_key=key.block_scope_id.url(),
defaults={'state': json.dumps({})}, defaults={'state': json.dumps({})},
...@@ -233,12 +233,12 @@ class ModelDataCache(object): ...@@ -233,12 +233,12 @@ class ModelDataCache(object):
field_object, _= XModuleStudentPrefsField.objects.get_or_create( field_object, _= XModuleStudentPrefsField.objects.get_or_create(
field_name=key.field_name, field_name=key.field_name,
module_type=key.block_scope_id, module_type=key.block_scope_id,
student=self.user, student=self.user.pk,
) )
elif key.scope == Scope.student_info: elif key.scope == Scope.student_info:
field_object, _ = XModuleStudentInfoField.objects.get_or_create( field_object, _ = XModuleStudentInfoField.objects.get_or_create(
field_name=key.field_name, field_name=key.field_name,
student=self.user, student=self.user.pk,
) )
cache_key = self._cache_key_from_kvs_key(key) cache_key = self._cache_key_from_kvs_key(key)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment