首页 > 解决方案 > wagtail:在创建时将页面添加为父页面的第一个子页面

问题描述

我试图将创建的列表页面添加为父索引页面的第一个子页面。问题是,当我使用 django treebeard api django treebeard api时,它有时会成功,但有时会显示错误:

{'path': ['具有此路径的页面已经存在。']}

我该如何解决这个问题?

代码:

@receiver(post_save, sender=ListPage)
def move_page(sender, instance, **kwargs):
    instance.move(instance.get_parent(), pos='first-child')

标签: djangowagtaildjango-treebeard

解决方案


TreeBeard API 解决方案: 您只需要通过父节点的兄弟节点或子节点来更改目标节点,而不是父节点本身。

Pythonic解决方案: 您可以交换页面ID(主键),首先创建您的页面,然后创建一个检查所有ID并指示您新创建的页面ID的函数,然后将最低ID号更改为等于最后一个孩子(这是您新创建的页面)+ 1,然后将您的页面 ID 更改为 1 或 0..!

注意:如果你需要重新排列整个页面,你最好在终端使用--fix-tree管理命令(如:python manage.py fixtree),然后按照上面提到的步骤,你也可以创建一个递归函数来一次完成以上所有操作..!我会故意让其他开发人员有机会帮助您使用递归函数示例(除非您可以自己做)..!


推荐阅读