[英]How to store parent pointers and data in a django reversion?
对于我设置的django-reversion系统的代码,我遇到了一些问题。
我有一个django模型ObjectClass
,它继承自非抽象模型_concept
。 长话故事,现在非常不可改变。 在代码的其余部分中有意义。
在类_concept
我将强制的ForeignKey
字段workgroup
关闭到另一个模型。
我已经使用Django reversion注册了ObjectClass
,如下所示:
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
在serialized_data
字段中都有一个工作组(这是预期的)。 ObjectClass
任何给定历史reversion.models.version
都没有 serialized_data
字段中的任何父信息(这是预期的)。 ObjectClass
任何给定的历史reversion.models.version
在serialized_data
字段中没有任何_concept_ptr
(这是不期望的)。 我怀疑django-reversion
可能存在以下划线开头的字段的问题, 但是我有其他以下划线开头的字段。
所以我在这里不知所措。 有没有办法让这个模型设置像这样的工作?
编辑:
在进行了更多检查之后,似乎has no workgroup
异常来自Haystack调用,这提醒我,由于某种原因, 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:
禁用干草堆索引器之后一切正常,问题是当django-reversion尝试保存项目以检查一致性时调用post_save
信号 - 然后django调用干草堆post_save
信号,试图用不完整的数据更新索引。
还没有解决方案。 我在干草堆处理程序中需要的是确定我是否在修订事务中的方法,或者是一种防止返回让这些信号触发的方法。 后者可能是一个更好的长期目标,因为我怀疑只是通过查看修订版它正在更新干草堆指数。
所以你得出了一个结论,以prevent reversion from letting those signals fire
https://docs.djangoproject.com/en/dev/topics/signals/#disconnecting-signals
django-reversion本身使用Signal.connect并断开连接。
https://github.com/etianen/django-reversion/blob/b2f5f3362054b2b72a95bee1ed0dfe2dd2301cda/src/reversion/revisions.py
我看你几乎没有选择。
disconnect/connect
的好地方(我想你需要覆盖reversion,但我不太了解它)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.