Merge pull request #505 from edx/dhm/xblock_save
More xblock.save() calls to handle fields set during inits
This commit is contained in:
@@ -225,6 +225,8 @@ class CachingDescriptorSystem(MakoDescriptorSystem):
|
||||
non_draft_loc = location.replace(revision=None)
|
||||
metadata_to_inherit = self.cached_metadata.get(non_draft_loc.url(), {})
|
||||
inherit_metadata(module, metadata_to_inherit)
|
||||
# decache any computed pending field settings
|
||||
module.save()
|
||||
return module
|
||||
except:
|
||||
log.warning("Failed to load descriptor", exc_info=True)
|
||||
@@ -630,6 +632,8 @@ class MongoModuleStore(ModuleStoreBase):
|
||||
definition_data = {}
|
||||
dbmodel = self._create_new_model_data(location.category, location, definition_data, metadata)
|
||||
xmodule = xblock_class(system, dbmodel)
|
||||
# decache any pending field settings from init
|
||||
xmodule.save()
|
||||
return xmodule
|
||||
|
||||
def save_xmodule(self, xmodule):
|
||||
|
||||
@@ -116,4 +116,6 @@ class CachingDescriptorSystem(MakoDescriptorSystem):
|
||||
module.previous_version = json_data.get('previous_version')
|
||||
module.update_version = json_data.get('update_version')
|
||||
module.definition_locator = self.modulestore.definition_locator(definition)
|
||||
# decache any pending field settings
|
||||
module.save()
|
||||
return module
|
||||
|
||||
@@ -537,11 +537,14 @@ class XModuleDescriptor(XModuleFields, HTMLSnippet, ResourceTemplates, XBlock):
|
||||
|
||||
system: Module system
|
||||
"""
|
||||
return self.module_class(
|
||||
# save any field changes
|
||||
module = self.module_class(
|
||||
system,
|
||||
self,
|
||||
system.xblock_model_data(self),
|
||||
)
|
||||
module.save()
|
||||
return module
|
||||
|
||||
def has_dynamic_children(self):
|
||||
"""
|
||||
@@ -613,7 +616,13 @@ class XModuleDescriptor(XModuleFields, HTMLSnippet, ResourceTemplates, XBlock):
|
||||
|
||||
new_block = system.xblock_from_json(cls, usage_id, json_data)
|
||||
if parent_xblock is not None:
|
||||
parent_xblock.children.append(new_block)
|
||||
children = parent_xblock.children
|
||||
children.append(new_block)
|
||||
# trigger setter method by using top level field access
|
||||
parent_xblock.children = children
|
||||
# decache pending children field settings (Note, truly persisting at this point would break b/c
|
||||
# persistence assumes children is a list of ids not actual xblocks)
|
||||
parent_xblock.save()
|
||||
return new_block
|
||||
|
||||
@classmethod
|
||||
|
||||
Reference in New Issue
Block a user