2013-04-12 24 views
7

我有一個Django模型,有2個ManyToMany字段。每次保存時,我都想從模型中處理數據。整個模型保存後的Django信號

post_save信號發送之前,它保存ManyToMany關係,所以我不能使用那一個。那麼你有m2m_changed信號,但由於我有2 ManyToMany字段,我不能確定哪個ManyToMany字段我應該把信號。

保存所有ManyToMany字段後是否沒有觸發信號?

+0

試試這個,通過谷歌搜索:http://techblog.ironfroggy.com/2011/02/django-how-to-hook-in-after-multiple.html - 可能會給你一些指針 –

+0

謝謝,但是如果您只使用Django管理員,那麼您發佈的鏈接上的解決方案纔有效。當模型保存在Django管理員之外時,我需要支持。 – rednaw

+0

http://stackoverflow.com/questions/1221878/why-does-django-post-save-signal-give-me-pre-save-data – catherine

回答

3

我覺得唯一的選擇是在每個m2m_change之後處理數據,因爲似乎沒有映射到「此型號上的所有相關數據已完成保存」的事件或信號。

如果這是高成本,您可以異步處理處理。當我遇到類似的情況時,我向模型添加了一個布爾字段來處理與處理有關的狀態(例如,MyModel.needs_processing),並且一個單獨的異步任務隊列(在我的情況下是Celery)將掃過每一分鐘並處理處理/狀態重置。

在你的情況,如果m2m_changedneeds_processingFalse,你可以設置needs_processingTrue和保存模型,通過你的任務隊列將其標記進行處理。然後,即使第二個m2m_changed爲其他m2m字段開火,也不會產生重複的處理成本。