我使用Reversion来控制模型对象的变化。在文档中我发现了这个:
每当您在修订范围内对模型调用 save() 时,它将被添加到该修订中
这是我使用模型保存方法的代码:
c.save(update_fields=['status'])
执行此代码时,对象的修订列表中没有新记录,至少我在管理员中看不到它。
我有一个类似的问题,在管理界面中进行的编辑有恢复,但 shell 中的编辑没有。
@yilmazhuseyin 是正确的,您需要上下文包装器,但我发现我有一个额外的错误,即我的模型没有注册。
在admin.py
:
class YourModelAdmin(reversion.VersionAdmin):
pass
admin.site.register(YourModel, YourModelAdmin)
将注册您的模型,但前提是调用管理代码。当我通过调用 shell 时它没有被调用python manage.py shell
所以,为了解决这个问题,我添加了models.py
import reversion
reversion.register(YourModel)
然后当我保存一个对象时,我仍然需要使用上下文包装器
with reversion.create_revision():
obj.save()
更新:
Revision 有一些针对这种情况的提示。( http://django-reversion.readthedocs.org/en/latest/api.html#api ) 一种是简单地导入您的管理模块,以便调用修订。
我认为您需要在修订事务中保存模型。
注意:如果您在修订范围之外调用 save(),则不会创建修订。这意味着您可以控制何时创建修订。
来源:http ://django-reversion.readthedocs.org/en/latest/api.html#creating-revisions