ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

如果post_save处理程序中发生异常,可以提交实例吗?

2019-06-20 17:43:01  阅读:180  来源: 互联网

标签:python django django-signals


我有一个post_save处理程序,它引用刚刚创建或更新的实例的数据库中的其他记录.但是,插入其他记录时可能会发生错误(可能是违反约束).

如果post_save处理程序中发生异常,是否仍可能提交初始实例?

答案可能取决于这些子问题:

>在post_save信号之前或之后,Django的自动提交模式是否提交?
>如果post_save中发生错误,Django是否会尝试使用嵌套事务来回滚正在保存的实例?

解决方法:

根据文档,如果您使用自动提交,则在任何post_save信号处理程序之前,将在.save()上提交对初始实例的更改. post_save中的异常不会将更改回滚到初始实例.

您可以通过查看django / db / models / base.py中save_base的源来确认这一点.自动提交将发生on line 555(在1.4.2中),但post_save信号未发送until line 564.您还可以看到Django不会尝试在.save()中使用任何嵌套事务.

如果您使用的是django.middleware.transaction.TransactionMiddleware并且没有使用自动提交装饰器覆盖其行为,则post_save期间的异常将回滚整个事务,包括对初始实例的更改.

标签:python,django,django-signals
来源: https://codeday.me/bug/20190620/1246771.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有