我得到了一个模型,它在某些情况下保存时发出自定义信号。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