diff options
| -rw-r--r-- | addons/web_editor/models/ir_ui_view.py | 6 | ||||
| -rw-r--r-- | addons/website/models/ir_ui_view.py | 9 | ||||
| -rw-r--r-- | addons/website/tests/test_views.py | 6 |
3 files changed, 20 insertions, 1 deletions
diff --git a/addons/web_editor/models/ir_ui_view.py b/addons/web_editor/models/ir_ui_view.py index bb38e2d0652..24bb9884d1f 100644 --- a/addons/web_editor/models/ir_ui_view.py +++ b/addons/web_editor/models/ir_ui_view.py @@ -160,6 +160,10 @@ class IrUiView(models.Model): out.tail = el.tail return out + @api.model + def _set_noupdate(self): + self.sudo().mapped('model_data_id').write({'noupdate': True}) + @api.multi def save(self, value, xpath=None): """ Update a view section. The view section may embed fields to write @@ -196,7 +200,7 @@ class IrUiView(models.Model): new_arch = self.replace_arch_section(xpath, arch_section) old_arch = etree.fromstring(self.arch.encode('utf-8')) if not self._are_archs_equal(old_arch, new_arch): - self.sudo().model_data_id.write({'noupdate': True}) # TODO check if we remove this + self._set_noupdate() self.write({'arch': self._pretty_arch(new_arch)}) @api.model diff --git a/addons/website/models/ir_ui_view.py b/addons/website/models/ir_ui_view.py index cbfb525431f..977a986745b 100644 --- a/addons/website/models/ir_ui_view.py +++ b/addons/website/models/ir_ui_view.py @@ -372,6 +372,15 @@ class View(models.Model): res['website_id'] = self.env['website'].get_current_website().id return res + @api.model + def _set_noupdate(self): + '''If website is installed, any call to `save` from the frontend will + actually write on the specific view (or create it if not exist yet). + In that case, we don't want to flag the generic view as noupdate. + ''' + if not self._context.get('website_id'): + super(View, self)._set_noupdate() + @api.multi def save(self, value, xpath=None): self.ensure_one() diff --git a/addons/website/tests/test_views.py b/addons/website/tests/test_views.py index 9ece6cf4c3d..22e442448f9 100644 --- a/addons/website/tests/test_views.py +++ b/addons/website/tests/test_views.py @@ -159,6 +159,12 @@ class TestViewSaving(common.TransactionCase): h.LI(h.SPAN("+12 3456789", attrs(model='res.company', id=1, field='phone', expression="edmund", type='char'))), ) ), encoding='unicode') + + self.view_id.with_context(website_id=1).save(value=replacement, xpath='/div/div[2]') + self.assertFalse(imd.noupdate, "view's xml_id shouldn't be set to 'noupdate' in a website context as `save` method will COW") + # remove newly created COW view so next `save()`` wont be redirected to COW view + self.env['website'].with_context(website_id=1).viewref(self.view_id.key).unlink() + self.view_id.save(value=replacement, xpath='/div/div[2]') # the xml_id of the view should be flagged as 'noupdate' |
