cells: better perfs on invalid cells report (#40252)

This commit is contained in:
Lauréline Guérin 2020-03-27 14:55:23 +01:00
parent 80500d71a9
commit 453a784007
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
3 changed files with 8 additions and 4 deletions

View File

@ -688,7 +688,7 @@ class CellBase(six.with_metaclass(CellMeta, models.Model)):
return cell_types
@classmethod
def get_cells(cls, cell_filter=None, skip_cell_cache=False, prefetch_validity_info=False, select_related=None, **kwargs):
def get_cells(cls, cell_filter=None, skip_cell_cache=False, prefetch_validity_info=False, select_related=None, load_contenttypes=False, **kwargs):
"""Returns the list of cells of various classes matching **kwargs"""
cells = []
pages = []
@ -712,6 +712,9 @@ class CellBase(six.with_metaclass(CellMeta, models.Model)):
break
else:
cell_classes = [get_cell_class(x) for x in cell_types]
if load_contenttypes:
# populate ContentType cache
ContentType.objects.get_for_models(*cell_classes)
for klass in cell_classes:
if klass is None:
continue

View File

@ -97,7 +97,8 @@ def invalid_cell_report(request):
invalid_cells = CellBase.get_cells(
select_related={'__all__': ['page']},
page__snapshot__isnull=True,
validity_info__invalid_since__isnull=False)
validity_info__invalid_since__isnull=False,
load_contenttypes=True)
invalid_cells = [c for c in invalid_cells if c.placeholder and not c.placeholder.startswith('_')]
invalid_cells.sort(key=attrgetter('page.order', 'page.pk', 'order'))
context = {

View File

@ -181,7 +181,7 @@ def test_page_footer_acquisition(app):
assert resp.text.count('BAR2FOO') == 1
queries_count_third = len(ctx.captured_queries)
# +2 for validity info of parent page
assert queries_count_third == queries_count_second + 2
assert queries_count_third == queries_count_second + 1
with CaptureQueriesContext(connection) as ctx:
resp = app.get('/second/third/fourth/', status=200)
@ -189,7 +189,7 @@ def test_page_footer_acquisition(app):
assert resp.text.count('BAR2FOO') == 1
queries_count_fourth = len(ctx.captured_queries)
# +1 for get_parents_and_self()
assert queries_count_fourth == queries_count_second + 2 + 1
assert queries_count_fourth == queries_count_second + 1 + 1
# check footer doesn't get duplicated in real index children
page6 = Page(title='Sixth', slug='sixth', template_name='standard', parent=page_index)