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