我得到了一个模型,它在某些情况下会在保存时发出自定义信号。
当我没有从 Django 管理员更新我的项目时,运行这个“post_save”可以正常工作,但是当我使用管理员更改它们时,我看到日志消息正在做所有它应该做的事情。但它没有得救。
我看到这个问题说这是因为管理员使用视图级别锁。所以我尝试运行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,目前它不是依赖项。
有什么建议么?