cells: better perfs on invalid cells report (#40252)
This commit is contained in:
parent
80500d71a9
commit
453a784007
|
@ -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
|
||||
|
|
|
@ -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 = {
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue