【问题标题】:How does one purge a database of old revisions?如何清除旧版本的数据库?
【发布时间】:2018-11-12 18:31:26
【问题描述】:

如何从 Wagtail 数据库中删除旧版本?我看到每次进行更改时,页面的先前版本都会保存在数据库中……非常好,但是我如何“取出垃圾”?

换句话说:“好的,这个页面现在已经完成了,我不想再保留以前的版本了。”你会认为这很容易——但是,在哪里是吗?

【问题讨论】:

    标签: wagtail


    【解决方案1】:

    修订存储在wagtail.core.models.PageRevision 模型中,即数据库中的wagtailcore_pagerevision 表中。要删除给定页面的所有修订,您可以从 ./manage.py shell 运行以下命令:

    from wagtail.core.models import PageRevision
    PageRevision.objects.filter(page_id=123).delete()
    

    请注意,“另存为草稿”和“提交审核”工作流程也可以通过保存 PageRevision 条目来工作,因此您只能在页面以您想要保留的状态发布后执行此操作。

    【讨论】:

    • “嗯,可能是这样,”但我认为它是用户界面功能和/或管理命令的明显候选者。 :-) 我会在某个地方提出这个建议。这应该是“简单易行”。
    • 例如,我可以使用 SQLite shell 简单地说:DELETE FROM wagtailcore_pagerevision; VACUUM ...吗?我会不可挽回地破坏任何东西吗?
    • Eeek! 我发现这种简单的方法行不通,因为wagtailcore_page 表包含一个专栏,live_revision_id。因此,不得删除此表所指向的修订。 (而且我不认为 SQLite 可以支持 DELETE 查询以一步完成。)
    • gasman,鉴于这个事实,您确定您的答案会奏效吗?它不会也删除“实时”修订...?
    • 实时页面内容始终在与实际页面模型相对应的表中可用,而不是在页面修订表中 - 这样您就可以为列表页面等编写“明显”查询,并且确保取回实时内容。在正常情况下,在页面修订表中会有相应的记录,这是live_revision_id 所指的,但这并没有真正用于除了在 Wagtail 中指示当前实时版本之外的任何内容修订列表视图。 Wagtail 管理员将优雅地处理缺少修订记录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多