0003-data-get-descendants-of-a-page-39091.patch
combo/data/models.py | ||
---|---|---|
236 | 236 |
return bool(self._children) |
237 | 237 |
return Page.objects.filter(parent_id=self.id).exists() |
238 | 238 | |
239 |
def get_descendants_and_me(self): |
|
240 |
def get_descendant_pages(page): |
|
241 |
descendants = [page] |
|
242 |
for item in page.get_children(): |
|
243 |
descendants.extend(get_descendant_pages(item)) |
|
244 |
return descendants |
|
245 |
return Page.objects.filter(id__in=[x.id for x in get_descendant_pages(self)]) |
|
246 | ||
239 | 247 |
def get_template_display_name(self): |
240 | 248 |
try: |
241 | 249 |
return settings.COMBO_PUBLIC_TEMPLATES[self.template_name]['name'] |
tests/test_pages.py | ||
---|---|---|
415 | 415 |
freezer.move_to('2020-01-08') |
416 | 416 |
page = Page.objects.get(slug='page-1') |
417 | 417 |
assert not page.is_new() |
418 | ||
419 |
def test_get_descendants_and_me(): |
|
420 |
''' 1 |
|
421 |
| |
|
422 |
2 6 |
|
423 |
/ \ |
|
424 |
3 4 5 7 8 9 |
|
425 |
''' |
|
426 |
def add_pages(depth=1, parent_id=None): |
|
427 |
if depth > 3: |
|
428 |
return |
|
429 |
page = Page(title='%s' % add_pages.num, slug='page-%s' % add_pages.num) |
|
430 |
page.parent_id = parent_id |
|
431 |
page.save() |
|
432 |
add_pages.num += 1 |
|
433 |
for m in range(0, depth + 1): |
|
434 |
add_pages(depth + 1, page.id) |
|
435 |
add_pages.num = 1 |
|
436 |
add_pages() |
|
437 | ||
438 |
page = Page.objects.get(slug='page-1') |
|
439 |
assert len(page.get_descendants_and_me()) == 9 |
|
440 |
page = Page.objects.get(slug='page-2') |
|
441 |
assert [int(x.title) for x in page.get_descendants_and_me()] == [2, 3, 4, 5] |
|
442 |
page = Page.objects.get(slug='page-3') |
|
443 |
assert [int(x.title) for x in page.get_descendants_and_me()] == [3] |
|
418 |
- |