私は、django-reversion を使用して変更を追跡し、以前の状態に戻す機能を提供するプロジェクトに取り組んでおり、一部のツリー型モデルには django-mptt を使用しています。ただし、削除および元に戻す機能には、いくつかの奇妙な動作があります。次のようなデモ データを使用しています。
Big Company
Sub Company 1
Sub Company 2
Tiny Company 1
Tiny Company 2
ノードを削除するとそのすべてのサブノードもリビジョンに保存されるように、django-reversion をリグしました。そのため、Big Company を削除するとツリー全体が削除され、それを元に戻す (または実際にはサブノードのいずれか) も元に戻ります木全体。ここまでは順調ですね。
ただし、サブノードを削除/元に戻そうとすると、事態が奇妙になり始めます。たとえば、「サブ会社 1」を削除すると、「サブ会社 2」とその子孫がテンプレートでのレンダリングを停止します (ただし、この動作は奇妙なことに、多少一貫性がありません)。または、django-reversion を使用して削除後に 'Sub Company 2' を復元する必要がありますが、'Tiny Companies' はテンプレートでレンダリングされません (ただし、オブジェクトをすばやくダッキングしshell
て呼び出すと、オブジェクトがまだデータベースにあることが示されます。彼らはまだ親として 'Sub Company 2' を持っています。
これらの問題はすべてCompany.objects.rebuild()
、ツリーを適切な表現に復元する を呼び出すことで修正できますが、このプロジェクトの本番対応バージョンでは、データベースに大量のデータが含まれている可能性があり、それはテーブル全体のアクティビティであるため、非常に困難です。高い。この問題を解決するために何ができるかについてのアイデアはありますか?