django-reversion 控制对象的先前版本
我正在使用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