django - 在 Wagtail 中以编程方式创建草稿页面的正确方法是什么?

标签 django wagtail revision addchild

只是为了保存页面:

parent_page = Page.objects.get(title="parent")
page = Page(title="child", owner=request.user)
parent_page.add_child(instance=page)
page.save() # not sure if this required

如果我需要保存草稿页怎么办?这段代码似乎有效,但我不确定它是否正确:

parent_page = Page.objects.get(title="parent")
page = Page(title="child", live=False, owner=request.user)
parent_page.add_child(instance=page)
page.save_revision()
page.save()

我需要在 page.save_revision() 之后调用 page.save() 吗?

使用此代码,在我的情况下一切正常,但我注意到 PageRevision.user_id 为空。它将来如何影响我的代码? 从 wagtail 代码中我看到我可以使用用户参数保存修订:

page.save_revision(user=request.user, log_action=True)

我已经在没有用户的情况下保存了修订版本,并且没有看到任何副作用。这个领域有多关键?我需要为所有现有修订填写 user_id 字段吗?

附注看起来最好将此代码包装在事务中,因为当它因验证错误 manage.py fixtree 失败时,会显示错误 不正确的 numchild 值

最佳答案

在任何一种情况下,您都不需要 page.save() - parent_page.add_child 处理保存。 (这可能是导致 manage.py fixtree 问题 - django-treebeard doesn't update in-memory instances after database operations 的原因,因此像 numchild 这样的字段可能会使用不正确的值保存。)

修订版上的 user 字段是可选的,因为对页面的更改并不总是由用户执行 - 它们可能以编程方式完成,就像您所做的那样。它只是用于记录目的(例如,显示在 Wagtail 管理页面的修订历史记录中)。

关于django - 在 Wagtail 中以编程方式创建草稿页面的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67028533/

相关文章:

django - 管理员中的 list_filter

html - 我如何居中对齐(响应式)实现 Django 的表单?

wagtail - 如何更改 Wagtail 的表单生成器呈现的 <textarea> 中的行数

django-comments-xtd 无法使用 wagtail 访问?如何排除故障?

svn - 将 svnversion 与 svn :keywords 一起使用

svn - SVN-提交旧版本

python - 在 django 应用程序中使用 beautifulsoup 和 requests 跟踪链接的正确语法是什么?

python - 在 Heroku 上部署 Django 应用程序时出现 pip install requirements.txt 问题

git - 谁删除了我在 git 中的更改?