2009-11-17 123 views
2

我想爲我的Django應用程序創建一個功能,類似於Django admin的'Recent Actions',以便將歷史信息存儲在其他模型上。在django中創建「歷史」類型模型的最佳方式是什麼?

例如說我有兩個模型叫書和作者。我想要第三個模型存儲信息,例如在模型中的某個給定對象上執行什麼操作(添加,修改,刪除等等)。

誰,何時,動作很簡單,我只是不知道如何來存儲關於其上執行動作什麼對象的信息。

我最初的想法是有,將存儲該信息的「交易」模式,都我的書和作者的模型可以有一個ForeignKey關係到它。但是,如果我刪除了給定的書或作者,那麼它的交易歷史記錄也會被刪除,並且我沒有記錄確實刪除了此對象。

我一直在想其他可能的解決方案,但我想我會先在這裏要求更多有經驗的觀點。我應該如何處理這個問題,以及對此有什麼合理的解決方案?

謝謝!

回答

4

你可能想看看django-reversion - 無論是執行或從中學習爲自己的實現。 Django版本通過保存有關更改的信息,以及該項目在該時刻存在的序列化副本來工作。這意味着你以後可以回想一個特定的項目並做一個比較或修復或其他任何事情。

如果您決定實現自己的自定義解決方案,我建議你利用Django的建於signal sub-system。 Django開箱即用,提供了您提到的模型創建,保存和刪除等常見信號。如果您發現需要它們,您也可以添加自定義信號。

使用信號將允許您開發獨立於書/作者實現代碼的「歷史」代碼,從長遠來看,這將成爲一項資產(而不是整個書籍/作者代碼中的串行歷史代碼)。 django-reversion再次作爲一個很好的參考,幾乎完全是通過信號來完成它的工作。

+0

謝謝,這真的很有幫助。 Django修訂似乎對我的需求太多了,但信號系統真的會幫助我。 – hora 2009-11-20 02:39:37

0

您也可以嘗試fullhistory該管理管理inteface之外的變化。 我在測試時遇到了一些問題,但它可能適用於您。

1

恕我直言,最好的解決辦法是由馬蒂Alchin在他的書中Pro Django開發的一個不幸的成本錢,但幸運的是,是一本值得去反正。

他的審計跟蹤的早期版本可以在Django維基上找到AuditTrail,但我不確定此代碼在最新版本的Django中的工作效果如何。

相關問題