10

最初のインストール手順を実行して初期リビジョンを作成しましたが、モデルを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デバッグ時に呼び出されないのに、レシーバーに復帰メソッドが表示されます。

私はDjangov1.4.1、復帰v1.6.2を持っています。

4

1 に答える 1

31

私はdjango-reversionを書いたので、この問題に光を当てることができると思います。

モデルが保存されると、モデルのバージョンが自動的に保存されます。ただし、次の条件が満たされている必要があります。

  1. モデルはdjango-reversionに登録されています。
  2. コードブロックは、リビジョン内にあるものとしてマークアップされます。

ポイント1は、モデルをに登録するか、models.pyファイルをVersionAdmin明示的に呼び出すことで実現できます。reversion.register()

ポイント2RevisionMiddlewarereversion.create_revision()、、またはデコレータまたはコンテキストマネージャを使用して実現できます。の管理者ビューVersionAdminもリビジョンを保存します。

したがって、シェルがバージョンを作成していない場合は、ポイント1またはポイント2のいずれかが満たされていません。修正方法は次のとおりです。

  1. VersionAdminを使用している場合は、関連する管理モジュールをシェルコードにインポートして、自動登録を開始します。reversion.register()または、 models.pyファイルを呼び出します。
  2. シェルコードで、reversion.create_revision()呼び出しの前後にコンテキストマネージャーを使用して保存します。
with reversion.create_revision():
    s.save()

低レベルAPIwikiページで、この種のことについて詳しく説明します。

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

于 2012-12-07T09:30:10.960 に答える