如何测试 Wagtail 中页面的顺序?

How to test order of Pages in Wagtail?

我有一个 Wagtail 网站,并且我有一个介于两种页面类型之间的 parent/child 结构:

class FrontPage(Page):
    subpage_types = ["InnerPage"]

    def get_next_page(self):
        return self.get_children().live().first()

class InnerPage(Page):
    parent_page_types = ["FrontPage"]

    def get_next_page(self):
        return self.get_next_siblings().live().first()

Admin 用户可以将 InnerPages 拖到他们在 Wagtail Admin 中选择的顺序中,这很棒。 FrontPage.get_children() 然后按该顺序获取内页,get_next_page() 方法 return 按相同顺序获取下一页。

我想编写测试来检查 get_next_page() 方法是否 return 正确的页面。但是在为测试创建页面时,我不知道如何为页面分配顺序。我可以看到,在执行 SQL 查询 wagtailcore_page.path 的 Wagtail 订单时,但我不确定在以编程方式创建 InnerPage 对象时如何影响它。

假设您在测试中创建页面时使用 parent_page.add_child(instance=new_page) - add_child method 将创建新页面作为顺序中的最后一个子页面,因此您只需要确保创建它们按照您希望它们出现的顺序排列。

要更好地控制新页面在排序中的插入位置,您可以改用 add_sibling method

parent_page = FrontPage.objects.first()
last_child = InnerPage(title='last child')
parent_page.add_child(instance=last_child
first_child = InnerPage(title='first child')
# insert first_child immediately before last_child
last_child.add_sibling(pos='left', instance=first_child)