gpt4 book ai didi

django - 如何正确重命名 Wagtail 页面模型

转载 作者:行者123 更新时间:2023-12-02 20:07:35 24 4
gpt4 key购买 nike

我在 wagtail 应用程序中有两个模型,PageTypeNewPageType,需要将 PageType 替换为 NewPageType >.

我认为我可以从 models.py 中删除 PageType,然后运行迁移将其删除,然后将 NewPageType 重命名为 PageType 并运行第二次迁移。

但是,当我这样做时遇到了错误:

[2019-01-22 23:20:26,344] [ERROR] Internal Server Error: /cms/
Traceback (most recent call last):
File "/.../python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/.../python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
[...snip...]
File "/.../python3.6/site-packages/django/db/models/query.py", line 1121, in _fetch_all
self._result_cache = list(self._iterable_class(self))
File "/.../python3.6/site-packages/wagtail/core/query.py", line 397, in specific_iterator
yield pages_by_type[content_type][pk]
KeyError: 278

Django 的内置迁移处理似乎没有自动更新某些内容。我不知道我在这里错过了哪些步骤,所以很想获得一些帮助。谢谢!

最佳答案

这是因为 Wagtail 页面使用 Multi-table inheritance 并且您删除的部分 PageType 页面仍然存在。

让我们看一下全新安装的 Wagtail(即 wagtail start mysite),它附带一个 home.HomePage 模型并创建一个 HomePage 默认情况下。我们可以查看数据库并确认数据库中确实有一个条目:

sqlite> SELECT * FROM home_homepage;
page_ptr_id
3

但是它相当空虚。没有标题,没有路径,只有一个 page_ptr_id。这是因为 HomePage 继承自 Page 模型,该模型不是抽象的。因此,该页面模型也有一个数据库表(这就是 Multi-table inheritance 与 Django 一起工作的方式)。我们看一下对应的表(自愿省略一些列):

sqlite> SELECT id, path, title, slug, url_path, content_type_id FROM wagtailcore_page;
id|path |title|slug|url_path|content_type_id
1 |0001 |Root |root|/ |1
3 |00010001|Home |home|/home/ |2

就是这里!

同样,在您的情况下,还有 wagtailcore_pagemyapp_pagetypemyapp_newpagetype 表。通过删除 PageType 模型,django 创建了一个迁移,然后删除了 myapp_pagetype 但将该条目保留在 wagtailcore_page 表中。因此现在,当您加载管理界面时,Wagtail 尝试加载页面#3,但失败了。

因此,在删除页面模型之前,您需要先删除所有页面。您可以通过在迁移中添加 RunPython 步骤来实现此目的。

您仍然需要重命名第二个模型,尽管这对于 Django 来说可能很困难,但如果幸运的话,可以在 models.py 文件中重命名它并运行 makemigrations 可能足以让 Django 检测到它应该重命名模型。如果没有,或者如果您有需要重命名的关系,则可能会涉及更多,请参阅 12

关于django - 如何正确重命名 Wagtail 页面模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54318017/

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