django-reversion 控制对象的先前版本

1 投票
2 回答
2075 浏览
提问于 2025-04-17 12:00

我正在使用django-reversion文档中提到的低级API,这样我就可以在自己的代码中访问版本历史,而不需要通过管理后台。为了存储一些额外的信息,我扩展了Revision模型,创建了自己的模型,并包含了一个OneToOneField(Revision)。到目前为止,一切都很顺利。

但是,既然我有了Revision的引用,我该如何直接访问它之前的版本呢?比如说,如果我想生成这个版本和上一个版本之间的变化列表,有没有比调用reversion.get_for_object然后在列表中查找我想要的版本更有效的方法呢?

2 个回答

0

版本对象有一个叫做修订版的属性,这个属性有两个方法,分别是 'get_next_by_date_created' 和 'get_previous_by_date_created'。你可以用这两个方法来前后查看版本历史。

version.revision.get_previous_by_date_created()
5

Revision对象有一个叫做date_created的属性,所以你可以写一个查询,来选择在给定修订的date_created之前,最新的那一个修订。基本上,我会复制低级API的get_for_date函数的实现,只需要做一个小改动——把"__lte"换成"date_created__lt"

def get_previous(object, date):
    """Returns the latest version of an object prior to the given date."""
    versions = reversion.get_for_object(object)
    versions = versions.filter(revision__date_created__lt=date)
    try:
        version = versions[0]
    except IndexError:
        raise Version.DoesNotExist
    else:
        return version

撰写回答