gpt4 book ai didi

django-migrations - 在迁移中移动 Wagtail 页面

转载 作者:行者123 更新时间:2023-12-05 08:32:58 24 4
gpt4 key购买 nike

我正在重组我的 Wagtail 应用以删除其中只有一个项目的 IndexPage,并将该项目移动为当前 IndexPage 父级的子项。

基本上是从这里开始的:

页--|
|--首页--|
|--ChildPages
(只有其中的 1 个)

为此:

页--|
|--子页面

我对模型进行了更改,以便使用此结构来创建新内容,并将相关 View 固定为直接指向 ChildPage。但现在我想将当前数据迁移到新结构,但我不确定如何着手......理想情况下,这将在迁移中完成,这样我们就不必手动进行任何操作。

有没有办法在迁移过程中以编程方式将这些 ChildPage 向上移动到树中?

最佳答案

不幸的是,有一个硬限制(可能)排除了在迁移中进行页面树调整的可能性:插入、移动和删除页面等树操作是作为 Page 模型上的方法实现的,在迁移中,您只能访问该模型的“虚拟”版本,它只允许您访问数据库字段和基本 ORM 方法,而不是那些自定义方法。

(您可以通过将 from wagtail.wagtailcore.models import Page 放在迁移中并使用它而不是标准的 Page = apps.get_model("wagtailcore ", "Page") 方法,但我不建议这样做 - 如果迁移在迁移序列中 Page 模型仍在运行的某个点运行,则它很可能会中断建立并且与模型的“真实”状态不匹配。)

相反,我建议写一个 Django management command进行树操作 - 在管理命令中, 可以安全地从 wagtailcore 导入 Page 模型,以及您的特定页面模型。 Page 提供了一个有效的方法 move(target, pos) as per the Treebeard API - 移动子页面的代码可能类似于:

from myapp.models import IndexPage

# ...
for index_page in IndexPage.objects.all():
for child_page in index_page.get_children():
child_page.move(index_page, 'right')
index_page.delete()

关于django-migrations - 在迁移中移动 Wagtail 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46594187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com