我正在开发一个项目,该项目使用 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 恢复“子公司 2”,“小公司”都不会在模板中呈现(尽管快速进入shell
并调用对象表明它们仍在数据库中,并且他们仍然将“子公司 2”作为其母公司。
所有这些问题都可以通过调用来解决Company.objects.rebuild()
,这会将树恢复到正确的表示形式——但是这个项目的生产就绪版本可能在数据库中有很多数据,而且由于这是一个全表活动,所以它会令人望而却步昂贵的。关于我可以做些什么来解决这个问题的任何想法?