我在我设置的 django-reversion 系统的一些代码上遇到了一些问题。
我有一个ObjectClass
继承自非抽象模型的 django 模型_concept
。很长的故事,现在非常不变。在代码的其余上下文中有意义。
在课堂上,_concept
我将强制ForeignKey
字段workgroup
转到另一个模型。
我已经ObjectClass
像这样注册了Django reversion:
reversion.unregister(ObjectClass)
reversion.register(ObjectClass,follow=['_concept_ptr'])
所有旧版本都保存并可以使用 'django-reversion-compare' 进行比较。不幸的是,当我点击任何旧版本查看历史版本时,我得到了错误:
RevertError at /module.py
Could not revert revision, due to database integrity errors.
在对 django-reversion 代码进行了一些挖掘之后,我做了一些摆弄,发现错误正在出现:
RelatedObjectDoesNotExist at /module.py
_concept has no workgroup.
现在我检查了数据库中存储的版本,发现了一些东西:
- 任何给定
reversion.models.version
的 _concept 历史在该serialized_data
领域都有一个工作组(这是预期的)。 - 任何给定
reversion.models.version
的 a历史ObjectClass
都没有该字段中的任何父信息serialized_data
(这是预期的)。 - 任何给定
reversion.models.version
的 an历史ObjectClass
都没有任何 a_concept_ptr
在该serialized_data
字段中(这是不期望的)。
我怀疑django-reversion
以下划线开头的字段可能存在问题,但是我还有其他以下划线开头的字段。
所以我在这里不知所措。有没有办法让这个模型设置像这样工作?
编辑:
经过更多检查后,似乎异常来自 Haystack 调用,这提醒我由于某种原因忽略了工作组has no workgroup
的事实。reversion
我检查了数据库,这是为一个项目序列化的内容(为便于阅读而添加了换行符):
In [28]: myobj.serialized_data
Out[28]: u'[{"fields": {
"definition": "<p>A code for sex.</p>\\r\\n",
"_is_locked": false,
"workgroup": 3,
"created": "2015-12-27T07:45:10.409Z",
"modified": "2015-12-27T08:38:26.989Z",
"readyToReview": false,
"_is_public": false,
"name": "Sex Code"
},
"model": "aristotle_mdr._concept", "pk": 30}]'
编辑2:
禁用 haystack 索引器后,现在一切正常,问题是当 django-reversion 尝试保存项目以检查一致性时调用 Haystack 信号 - 然后 django 调用 haystackpost_save
信号尝试使用不完整的数据更新索引。
仍然没有解决方案。我在我的 haystack 处理程序中需要的是一种确定我是否在修订事务中的方法,或者一种防止还原让这些信号触发的方法。后者可能是一个更好的长期目标,因为我怀疑仅仅通过查看修订它正在更新 Haystack 索引。