diff --git a/combo/data/models.py b/combo/data/models.py index 6b1f3bb2..768ac17b 100644 --- a/combo/data/models.py +++ b/combo/data/models.py @@ -598,9 +598,7 @@ class PageSnapshot(models.Model): # try reusing existing page return Page.snapshots.get(snapshot=self) except Page.DoesNotExist: - page = Page.load_serialized_page(self.serialization, snapshot=self) - page.load_serialized_cells(self.serialization['cells']) - return page + return self.load_page(self.serialization, snapshot=self) def restore(self): json_page = self.serialization @@ -612,8 +610,16 @@ class PageSnapshot(models.Model): json_page['fields']['exclude_from_navigation'] = self.page.exclude_from_navigation # restore snapshot with transaction.atomic(): - page = Page.load_serialized_page(json_page) + return self.load_page(json_page) + + def load_page(self, json_page, snapshot=None): + try: + post_save.disconnect(cell_maintain_page_cell_cache) + page = Page.load_serialized_page(json_page, snapshot=snapshot) page.load_serialized_cells(json_page['cells']) + finally: + post_save.connect(cell_maintain_page_cell_cache) + page.build_cell_cache() return page @@ -1364,7 +1370,7 @@ class LinkCell(CellBase): return [] def check_validity(self): - if self.link_page: + if self.link_page_id: self.mark_as_valid() return if not self.url: diff --git a/tests/test_manager.py b/tests/test_manager.py index a3af2c7e..5319ddea 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -832,7 +832,7 @@ def test_site_export_import_json(app, admin_user): resp.form['site_file'] = Upload('site-export.json', site_export, 'application/json') with CaptureQueriesContext(connection) as ctx: resp = resp.form.submit() - assert len(ctx.captured_queries) in [1142, 1143] + assert len(ctx.captured_queries) in [1140, 1141] Page.objects.all().delete() assert LinkCell.objects.count() == 0 @@ -841,7 +841,7 @@ def test_site_export_import_json(app, admin_user): resp.form['site_file'] = Upload('site-export.json', site_export, 'application/json') with CaptureQueriesContext(connection) as ctx: resp = resp.form.submit() - assert len(ctx.captured_queries) == 667 + assert len(ctx.captured_queries) == 665 assert set(Page.objects.get(slug='one').related_cells['cell_types']) == set( ['data_textcell', 'data_linkcell'] ) @@ -2092,8 +2092,6 @@ def test_page_versionning(app, admin_user): cell3 = TextCell(page=page, placeholder='content', text='Foobar3', order=2) cell3.save() - anonymous_app = app - app = login(app) resp = app.get('/manage/pages/%s/' % page.id, status=200) @@ -2128,7 +2126,7 @@ def test_page_versionning(app, admin_user): with CaptureQueriesContext(connection) as ctx: resp2 = resp.click('view', index=1) - assert len(ctx.captured_queries) == 319 + assert len(ctx.captured_queries) == 71 assert Page.snapshots.latest('pk').related_cells == {'cell_types': ['data_textcell']} assert resp2.text.index('Hello world') < resp2.text.index('Foobar3') @@ -2189,7 +2187,7 @@ def test_page_versionning(app, admin_user): resp = resp.click('restore', index=6) with CaptureQueriesContext(connection) as ctx: resp = resp.form.submit().follow() - assert len(ctx.captured_queries) == 575 + assert len(ctx.captured_queries) == 327 resp2 = resp.click('See online') assert resp2.text.index('Foobar1') < resp2.text.index('Foobar2') < resp2.text.index('Foobar3')