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

时间:2012-01-31 03:01:08

标签: python django django-reversion

我正在使用django-reversion文档调用low-level API的内容,以便在我自己的代码中访问reversion历史记录,除了admin。为了存储元数据,我通过设置包含Revision的我自己的模型来扩展OneToOneField(Revision)模型。到目前为止,非常好。

但鉴于对Revision的引用,如何在之前直接访问?例如,要生成此修订版与上一版本之间的更改列表,是否有更有效的方法,而不是回调reversion.get_for_object并在列表中搜索我正在寻找的版本?

2 个答案:

答案 0 :(得分:5)

Revision对象具有date_created属性,因此您可以编写一个查询,以便在给定修订版date_created之前为您的对象选择单个最新修订版本。我基本上复制了低级API的get_for_date函数的实现,只需更改一次 - 使用"date_created__lt"代替"__lte"

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

答案 1 :(得分:0)

版本对象有一个修订属性,它有两个方法,' get_next_by_date_created'和' get_previous_by_date_created',您可以用它来遍历版本历史。

version.revision.get_previous_by_date_created()