tl;dr-リビジョンは「元に戻す」ものではありません。それはあなたが復元するものです。したがって、元に戻すとは、元にしたいものの前に発生した最新のリビジョンを見つけて、revert()を呼び出して復元する場合です。
django-reversionのデータモデルは、リビジョンとバージョンに基づいています。リビジョンは1つ以上のバージョンで構成され、バージョンは1つのDjangoモデルのシリアル化された状態を表します。
django-reversionを使用すると、以前のバージョンまたはリビジョンの状態にロールバックできます。これは元に戻す機能と似ていますが、同じではありません。
次のワークフローを検討してください。
# Create a Revision containing two Versions.
with reversion.create_revision():
a = SomeModel.objects.create(name="A version 1")
b = SomeModel.objects.create(name="B version 1")
# Create a Revision containing to Versions.
with reversion.create_revision():
a.name = "A version 2"
a.save()
b.name = "B version 2"
b.save()
この時点で、最後のリビジョンに戻すことで、2番目の編集を「元に戻す」ことができます。
# Revert just 'a' to version 1. This is the last but one revision.
reversion.get_for_object(a)[1].revert()
# Or, revert 'a' and 'b' to version 1.
reversion.get_for_object(b)[1].revision.revert()
次のように削除して復元することもできます。
# Store the pk of 'a', then delete it.
a_pk = a.pk
a.delete()
# Recover 'a' via it's primary key.
reversion.get_deleted(SomeModel).filter(object_id=a_pk).revert()
したがって、単一のモデル、または一緒に保存されたモデルのグループの以前の状態に戻すことができます。しかし、「今やったことを元に戻す」と言う方法はありません。代わりに、「この時点のようになる」ように復帰を指示する必要があります。
あなたの場合、一括削除を元に戻したい場合は、次のように行うことができます。
# Save a revision containing all SomeModel instances.
with reversion.create_revision():
for obj in SomeModel.objects.all():
obj.save()
# Delete them all.
SomeModel.objects.delete()
# Revert back to the previous revision, where nothing was deleted.
Revision.objects.filter(version__content_type=ContentType.objects.get_for_model(SomeModel)).order_by("-date_created")[0].revert()
ただし、この場合、SomeModelの他のリビジョンがいつでも作成される可能性があるため、非常に愚かな競合状態になります。