data: get descendants of a page (#39091)
This commit is contained in:
parent
3e5e80f6e6
commit
bd558163a8
|
@ -237,6 +237,14 @@ class Page(models.Model):
|
|||
return bool(self._children)
|
||||
return Page.objects.filter(parent_id=self.id).exists()
|
||||
|
||||
def get_descendants_and_me(self):
|
||||
def get_descendant_pages(page):
|
||||
descendants = [page]
|
||||
for item in page.get_children():
|
||||
descendants.extend(get_descendant_pages(item))
|
||||
return descendants
|
||||
return Page.objects.filter(id__in=[x.id for x in get_descendant_pages(self)])
|
||||
|
||||
def get_template_display_name(self):
|
||||
try:
|
||||
return settings.COMBO_PUBLIC_TEMPLATES[self.template_name]['name']
|
||||
|
|
|
@ -415,3 +415,29 @@ def test_page_is_new(freezer):
|
|||
freezer.move_to('2020-01-08')
|
||||
page = Page.objects.get(slug='page-1')
|
||||
assert not page.is_new()
|
||||
|
||||
def test_get_descendants_and_me():
|
||||
''' 1
|
||||
|
|
||||
2 6
|
||||
/ \
|
||||
3 4 5 7 8 9
|
||||
'''
|
||||
def add_pages(depth=1, parent_id=None):
|
||||
if depth > 3:
|
||||
return
|
||||
page = Page(title='%s' % add_pages.num, slug='page-%s' % add_pages.num)
|
||||
page.parent_id = parent_id
|
||||
page.save()
|
||||
add_pages.num += 1
|
||||
for m in range(0, depth + 1):
|
||||
add_pages(depth + 1, page.id)
|
||||
add_pages.num = 1
|
||||
add_pages()
|
||||
|
||||
page = Page.objects.get(slug='page-1')
|
||||
assert len(page.get_descendants_and_me()) == 9
|
||||
page = Page.objects.get(slug='page-2')
|
||||
assert [int(x.title) for x in page.get_descendants_and_me()] == [2, 3, 4, 5]
|
||||
page = Page.objects.get(slug='page-3')
|
||||
assert [int(x.title) for x in page.get_descendants_and_me()] == [3]
|
||||
|
|
Loading…
Reference in New Issue