diff --git a/wagtail/core/actions/delete_page.py b/wagtail/core/actions/delete_page.py index db8b717908..52675780de 100644 --- a/wagtail/core/actions/delete_page.py +++ b/wagtail/core/actions/delete_page.py @@ -33,9 +33,8 @@ class DeletePageAction: # works around a bug in treebeard <= 3.0 where calling SpecificPage.delete() fails to delete # child pages that are not instances of SpecificPage if type(page) is Page: - if page.get_children().exists(): - for child in page.get_children(): - self.log_deletion(child.specific) + for child in page.get_descendants(): + self.log_deletion(child.specific) self.log_deletion(page.specific) # this is a Page instance, so carry on as we were diff --git a/wagtail/core/tests/test_audit_log.py b/wagtail/core/tests/test_audit_log.py index 08e81865d2..d836645424 100644 --- a/wagtail/core/tests/test_audit_log.py +++ b/wagtail/core/tests/test_audit_log.py @@ -224,16 +224,23 @@ class TestAuditLog(TestCase): child = self.home_page.add_child( instance=SimplePage(title="Another child", slug="child-page-2", content="hello") ) + child.add_child( + instance=SimplePage( + title="Grandchild", slug="grandchild-page", content="hello" + ) + ) - child.delete() - self.assertEqual(PageLogEntry.objects.filter(action='wagtail.delete').count(), 1) - - # check deleting a parent page logs child deletion + # check deleting a parent page logs descendent deletion self.home_page.delete() - self.assertEqual(PageLogEntry.objects.filter(action='wagtail.delete').count(), 3) - self.assertListEqual( - list(PageLogEntry.objects.filter(action='wagtail.delete').values_list('label', flat=True)), - ['Homepage (simple page)', 'Child (simple page)', 'Another child (simple page)'] + self.assertEqual(PageLogEntry.objects.filter(action='wagtail.delete').count(), 4) + self.assertEqual( + set(PageLogEntry.objects.filter(action='wagtail.delete').values_list('label', flat=True)), + { + 'Homepage (simple page)', + 'Grandchild (simple page)', + 'Child (simple page)', + 'Another child (simple page)', + }, ) def test_workflow_actions(self):