在迁移中移动 Wagtail 页面

2023-12-24

我正在重组我的 Wagtail 应用程序,以删除其中仅包含单个项目的 IndexPage,并将该项目移至当前 IndexPage 父级的子级。

基本上是从这个开始:

Page--| |--IndexPage--| |--ChildPages(其中只有 1 个)

to this:

Page--| |--ChildPage

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

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


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

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

相反,我建议写一个Django管理命令 https://docs.djangoproject.com/en/1.11/howto/custom-management-commands/进行树操作 - 在管理命令中is安全进口Page来自 wagtailcore 的模型,以及您的特定页面模型。Page提供了一个方法move(target, pos)哪个有效根据 Treebeard API http://django-treebeard.readthedocs.io/en/latest/api.html#treebeard.models.Node.move- 移动子页面的代码可能类似于:

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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在迁移中移动 Wagtail 页面 的相关文章

  • Puput(基于 Wagtail 的博客)- 文件在哪里?

    我已将 puput 博客添加到现有的 Django 项目中 我遵循了设置独立博客应用程序的所有步骤 https puput readthedocs io en latest setup html https puput readthedoc
  • 在迁移中移动 Wagtail 页面

    我正在重组我的 Wagtail 应用程序 以删除其中仅包含单个项目的 IndexPage 并将该项目移至当前 IndexPage 父级的子级 基本上是从这个开始 Page IndexPage ChildPages 其中只有 1 个 to t
  • 如何使用 Django migrate 命令跳过迁移?

    首先 我问的是1 7中引入的Django迁移 而不是south 假设我有迁移001 add field x 002 add field y 并且两者都应用于数据库 现在我改变主意并决定恢复第二次迁移并将其替换为另一个迁移003 add fi
  • Django 1.8 迁移无法将列 id 转换为整数

    我正在将我的网站从 SQLite 后端迁移到 Postgres 后端 从项目一开始 我们就一直在运行原生 Django 风格的迁移 即不是 South 大多数迁移运行良好 但我们的应用程序出现了问题 我们在 Postgres 迁移中已经走到
  • 如何在 Wagtail 中创建不可见的虚拟页面?

    如何在 Wagtail 中创建不可见的虚拟页面 我需要 Wagtail 中的 虚拟 页面对象来为非基于 Wagtail 的页面以及外部资源构建菜单 见我的入帖here https stackoverflow com questions 56
  • Django 迁移默认值可调用生成相同的条目

    我正在向现有数据库表添加一个新字段 它是用字符串自动生成的 这是我的代码 from django utils crypto import get random string Model verification token models C
  • 如何在页面 API 中获取图像 url 或下载图像的 url,其中图像是由流场创建的?

    在我的 wagtail 应用程序中 我有一个流字段 用于使用 ImageChooserBlock 上传图像以及标题和文本 这意味着在单个流字段中我有一个标题 一个文本和一个图像上传输入 我正在尝试在其余框架的页面 API 中获取图像 url
  • Django 项目中的迁移目录是否应该推送到 git 存储库?

    在 Django 项目中 当模型更改时 迁移文件也会更改 如果我将迁移目录添加到 git 这会引起其他人的冲突 如果我不添加它 有时在迁移时会引发服务器错误 你怎么解决这个问题 来自姜戈迁移文档 https docs djangoproje
  • 运行“python manage.py migrate”命令时 Django 中出现 ValueError

    我需要向 Django 添加更多字段User模型 所以我创建了一个自定义模型类 名为Accounts在一个名为accounts 扩展了 Django 的抽象用户 class 之后我更新了我的设置 py文件 定义AUTH USER MODEL
  • 迁移文件中 Django 的“primary_key”字段中的“serialize=False”是什么意思?

    我找不到原因serialize False在 Django 文档或源代码中的主键字段上设置 有什么特殊原因要设置吗 Thanks Azd325 听起来很简单 该字段不会成为序列化对象的一部分 不过 我猜您的问题与正在迁移的模型有关 并且生成
  • Wagtail 为 MyPage 设置附加权限

    这里是鹡鸰新手 我试图为特定模型添加一些额外的权限 但 wagtail admin 中没有显示任何内容 我可以用 django 方式做到这一点 但我的印象是 wagtail 可以处理这种类型的权限 我在 wagtail 文档中找不到任何提示
  • 如何以编程方式获取上次迁移的名称?

    我想获取 Django 中最后应用的迁移的名称 我知道 Django 迁移存储在django migrations然而表django db migrations migration Migration不是一个models Model在那张桌
  • Django 迁移和可定制的可重用应用程序

    大约三周前 我开始编写我的第一个可重用应用程序 但我在处理迁移方面遇到了麻烦 我希望我的应用程序的某些点是可定制的 因此我有一个conf子模块 https github com Aladom django mailing blob 6260
  • Django:操作错误没有这样的表

    我正在使用 Django CMS 的 Django 项目中构建一个相当简单的应用程序 Research 这是我对项目 应用程序的第一次尝试 它的主要目的是存储各种知识资产 即研究人员撰写的文章 书籍等 问题是当我将浏览器指向 researc
  • 即使运行迁移后,Django 编程错误列也不存在

    I run python manage py makemigrations我得到 未检测到任何变化 然后 python manage py migrate我得到 无需申请迁移 然后 我尝试将更改推送到生产中 git推送heroku大师 一切
  • Django 1.7迁移找不到应用程序

    我正在为应用程序创建数据迁移Notification 在这里我使用模型的参考 Manager 来自应用程序accounts Manager apps get model accounts Manager 它抛出错误 self code fr
  • 如何使自定义 django 迁移可逆?

    我最初的问题是 给定一个包含 60M 行的数据库表 我需要将字段类型从布尔字段转换为整数字段 我想为此创建一个自定义的 django 迁移 如果您有比这更好的方法 请告诉我 如下所示 def make changes apps schema
  • 添加信号接收器后,Django 从头开始​​迁移失败:“没有这样的表”

    我在代码中添加了一些信号接收器 一切都工作正常 直到我将其推送到版本控制并且 CI CD 管道失败 在尝试迁移时 它会抱怨 django db utils OperationalError no such table badges badg
  • 如何将自定义迁移添加到外部 Django 应用程序

    我已经在我的自定义 Django 1 10 应用程序中对一些第三方应用程序进行了一些猴子修补 现在 当我尝试创建初始迁移时 它还会为这些外部应用程序生成迁移 但它将这些迁移放在我的 virtualenv 的站点中 packages 目录 无
  • 您将如何创建“手动”django 迁移?

    我发现我可以使用 django 项目中的 postgres 数据库设置列的默认值migrations RunSQL some sql 我目前正在通过添加列 makemigrations 然后删除列 makemigrations 然后手动修改

随机推荐