我得到了一個模型,它在某些情況下保存時發出自定義信號。post_save從管理員調用,但m2m不保存
當我沒有從Django管理員更新我的項目時,運行這個「post_save」工作正常,但是當我使用管理員更改它們時,我看到日誌消息處理它應該做的所有事情。但它不會被保存。
我看到this question其中說這是因爲管理員使用視圖級鎖。所以我試圖運行transaction.commit()
以及將@transaction.commit_manually
添加到信號處理程序。可惜沒有任何東西被保存到數據庫中。
更新:這是m2m
關係organisations
下面,這是不正確保存。沒有任何異常或引發的任何事情,只是在通過管理員時不會被放入數據庫。
我參考處理:
@transaction.commit_manually # tried this as both first and second decorator
@receiver(node_moved, sender=Folder)
def folder_moved_handler(sender, instance, **kwargs):
transaction.commit_manually()
transaction.commit()
# When a folder was so moved it became root
if instance.is_root_node():
# Copy these organisations to the new root
inherit_permissions_from = instance.inherit_permissions_from
print inherit_permissions_from
instance.inherit_permissions_from = None
instance.save()
set_inherited_permissions_descendents(instance, None)
if inherit_permissions_from:
for org in inherit_permissions_from.organisations_with_access:
instance.organisations.add(org)
print 'add org: {0}'.format(org)
else:
instance.inherit_permissions_from = get_who_to_inherit_from(instance)
instance.save()
print 'returning'
print transaction.commit()
我在以什麼做虧本的那一刻,從長遠來看,我是從使用管理這個任務搬走,因爲這是一個有點笨重的一般工作流程,但直到我有時間,我只是想讓它工作。
我唯一能夠想到的就是設置一個標誌並每隔一段時間運行一個批處理作業。或者將它傳遞給目前不屬於依賴的Celery。
有什麼建議嗎?
使用celery.contrib.rdb調試和找出究竟發生了什麼 – mossplix
特別是rdb的任何特殊原因?我已經通過與pdb的代碼,但由於它沒有引發任何異常,我不熟悉管理員的代碼,我不知道該找什麼。有什麼建議麼? 在這種情況下,我想要運行的是添加m2m關係,它在運行時獲取輸出。但沒有反映在數據庫上。 :x – gaqzi