pro*_*ble 1 wagtail django-migrations
我正在重组我的Wagtail应用程序,以删除其中仅包含一个项目的IndexPage,并将该项目移动为当前IndexPage父项的子项。
基本上是从此开始:
Page--|
|--IndexPage--|
|--ChildPages (其中只有1种)
对此:
Page--|
|--ChildPage
我已经对模型进行了更改,以便使用此结构来创建新内容并修复相关视图以直接指向ChildPage。但是现在我想将当前数据迁移到新结构,并且不确定如何处理...理想情况下,这将在迁移中完成,因此我们无需手动进行任何操作。
有没有办法在迁移过程中以编程方式将这些ChildPage移到树上?
不幸的是,有一个严格的限制(可能)排除了在迁移过程中进行页面树调整的可能性:诸如插入,移动和删除页面之类的树操作是作为Page模型上的方法实现的,而在迁移过程中,您只能访问“该模型的“虚拟”版本,它仅使您可以访问数据库字段和基本的ORM方法,而不能访问那些自定义方法。
(您也许可以通过放入from wagtail.wagtailcore.models import Page迁移并使用该迁移而不是标准Page = apps.get_model("wagtailcore", "Page")方法来解决此问题,但我不建议这样做-如果在迁移序列中Page模型的某个点运行迁移,则可能会破坏仍在建立中,并且与模型的“真实”状态不匹配。)
相反,我建议编写Django管理命令来进行树操作-在管理命令中,可以安全地Page从wagtailcore 导入模型以及您的特定页面模型。Page提供了一种根据Treebeard APImove(target, pos)工作的方法-移动子页面的代码可能类似于:
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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
590 次 |
| 最近记录: |