[英]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.