在 Wagtail 中以编程方式创建草稿页面的正确方法是什么?
What is the proper way to create draft page programatically in the 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 字段?
P.S。看起来最好将此代码包装在事务中,因为当它因验证错误而失败时 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 管理页面的修订历史中显示)。
我只是为了保存页面:
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 字段?
P.S。看起来最好将此代码包装在事务中,因为当它因验证错误而失败时 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 管理页面的修订历史中显示)。