Django的逆转不保存在外壳进行了修改(Django reversion does not sav

2019-07-31 07:34发布

我做了最初的安装步骤和创建初始版本,但后来当我保存在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。

Answer 1:

我写了Django的回归,所以我想我可以摆脱对这个问题的一些情况。

当一个模型保存模型的版本会自动保存,提供下列条件:

  1. 该模型与Django的逆转注册。
  2. 码块被标记为修订内。

1点可以通过注册一个模型来实现VersionAdmin ,或显式调用reversion.register()在你的models.py文件。

点2可以通过使用来实现RevisionMiddlewarereversion.create_revision()装饰或上下文管理器。 在任何管理意见VersionAdmin还节省了修订。

所以,如果你的shell也没有创造版本,那么无论点1或2点没有被满足。 以下是如何解决这个问题:

  1. 如果您使用VersionAdmin,导入相关的管理模块中的shell代码的自动注册踢。 另外,调用reversion.register()在你的models.py文件。
  2. 在你的shell代码,使用reversion.create_revision()在你的电话上下文管理器进行保存。
with reversion.create_revision():
    s.save()

更多关于这种类型的底层API wiki页面的事情:

http://django-reversion.readthedocs.org/en/latest/api.html



文章来源: Django reversion does not save revisions made in shell