モデル オブジェクトの変更を制御するには、Reversionを使用します。ドキュメントで私はこれを見つけました:
リビジョンのスコープ内のモデルで save() を呼び出すと、そのリビジョンに追加されます
モデルの save メソッドを使用するコードは次のとおりです。
c.save(update_fields=['status'])
このコードが実行されると、オブジェクトのリビジョン リストに新しいレコードはありません。少なくとも、管理者には表示されません。
管理インターフェイスで行われた編集には元に戻すという同様の問題がありましたが、シェルにはありませんでした。
@yilmazhuseyin は正しいです。コンテキスト ラッパーが必要ですが、モデルが登録されないという追加のバグがあることがわかりました。
でadmin.py
:
class YourModelAdmin(reversion.VersionAdmin):
pass
admin.site.register(YourModel, YourModelAdmin)
モデルを登録しますが、管理コードが呼び出された場合のみです。経由でシェルを呼び出したときに呼び出されていませんでしたpython manage.py shell
だから、これを修正するために追加しましたmodels.py
import reversion
reversion.register(YourModel)
そして、オブジェクトを保存したときに、コンテキスト ラッパーを使用する必要がありました
with reversion.create_revision():
obj.save()
アップデート:
リビジョンには、この状況に対するヒントがいくつかあります。( http://django-reversion.readthedocs.org/en/latest/api.html#api ) 1 つは、単純に管理モジュールをインポートして、リビジョンが呼び出されるようにすることです。
リビジョン トランザクションでモデルを保存する必要があると思います。
注: save() をリビジョンのスコープ外で呼び出した場合、リビジョンは作成されません。これは、いつリビジョンを作成するかを制御できることを意味します。
ソース: http://django-reversion.readthedocs.org/en/latest/api.html#creating-revisions