微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在 Wagtail 中以编程方式创建草稿页面的正确方法是什么?

我只是为了保存页面

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 显示错误 Incorrect numchild value

解决方法

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。