我做了最初的安装步骤和创建初始版本,但后来当我保存在Django壳模型,则不会创建新的修订:
In [1]: s = Shop.objects.all()[0]
In [2]: import reversion
In [3]: s.name = 'a'
In [4]: s.save()
In [5]: s.name = 'b'
In [6]: s.save()
In [7]: reversion.get_for_object(s)
Out[7]: [<Version: <1> "X">]
这是最初的版本。
当我从视图更新模型,成功地创建了修订。
我在想什么?
models.py文件是:
...
class Shop(Model):
...
import reversion
reversion.register(Shop)
<EOF>
我看到当中的回归方法post_save
接收器,虽然当我调试它,它不叫。
我有Django的V1.4.1,逆转V1.6.2。
我写了Django的回归,所以我想我可以摆脱对这个问题的一些情况。
当一个模型保存模型的版本会自动保存,提供下列条件:
- 该模型与Django的逆转注册。
- 码块被标记为修订内。
1点可以通过注册一个模型来实现VersionAdmin
,或显式调用reversion.register()
在你的models.py文件。
点2可以通过使用来实现RevisionMiddleware
或reversion.create_revision()
装饰或上下文管理器。 在任何管理意见VersionAdmin
还节省了修订。
所以,如果你的shell也没有创造版本,那么无论点1或2点没有被满足。 以下是如何解决这个问题:
- 如果您使用VersionAdmin,导入相关的管理模块中的shell代码的自动注册踢。 另外,调用
reversion.register()
在你的models.py文件。 - 在你的shell代码,使用
reversion.create_revision()
在你的电话上下文管理器进行保存。
with reversion.create_revision():
s.save()
更多关于这种类型的底层API wiki页面的事情:
http://django-reversion.readthedocs.org/en/latest/api.html