diff --git a/cms/models/pluginmodel.py b/cms/models/pluginmodel.py index 37f90d30e25..c684aaec2bc 100644 --- a/cms/models/pluginmodel.py +++ b/cms/models/pluginmodel.py @@ -238,7 +238,7 @@ def save(self, no_signals=False, *args, **kwargs): placeholder_id=self.placeholder_id).count() self.add_root(instance=self) return - super(CMSPlugin, self).save() + super(CMSPlugin, self).save(*args, **kwargs) def reload(self): return CMSPlugin.objects.get(pk=self.pk) diff --git a/cms/utils/copy_plugins.py b/cms/utils/copy_plugins.py index 6e316e511f8..ea9075cfdc3 100644 --- a/cms/utils/copy_plugins.py +++ b/cms/utils/copy_plugins.py @@ -29,7 +29,12 @@ def copy_plugins_to(old_plugins, to_placeholder, for idx, plugin in enumerate(new_plugins): if plugin.parent_id is None: plugin.parent_id = parent_plugin_id - plugin.save() + # Always use update fields to avoid side-effects. + # In this case "plugin" has invalid values for internal fields + # like numchild. + # The invalid value is only in memory because the instance + # was never updated. + plugin.save(update_fields=['parent']) new_plugins[idx] = plugin.move(parent_plugin, pos="last-child") plugins_ziplist = list(zip(new_plugins, old_plugins))