|
|
1
32
通过管理表单保存模型时,它不是原子事务。首先保存主对象(以确保其具有PK),然后保存M2M 尝试
与ORM重构之前的日子相比,代码有了一些变化,但归根结底,它是在
所以要回答你的问题:是的,这是一个交易问题。 事务结束时是否抛出信号?没有官方消息,但请继续阅读: related thread a few months ago Grégoire posted a MonkeyPatch |
|
|
2
9
当您试图访问模型的post_保存信号中的多个字段时,相关对象已被删除,在信号完成之前不会再次添加。 要访问此数据,您必须与ModelAdmin中与save_相关的方法相结合。不幸的是,对于需要定制的非管理员请求,您还必须在post_save信号中包含代码。 例子:
|
|
|
3
5
我有一个通用的解决方案,看起来比猴子修补核心或者甚至用芹菜更干净(尽管我相信有人会找到它失败的地方)。基本上,我在admin中为具有m2m关系的表单添加了clean()方法,并将实例关系设置为clean_数据版本。这使得正确的数据可用于实例的save方法,即使它还没有“在书上”。尝试一下,看看效果如何:
|
|
|
4
3
http://gterzian.github.io/Django-Cookbook/signals/2013/09/07/manipulating-m2m-with-signals.html 问题: 当您在post或pre_save信号接收器中操作模型的m2m时,您的更改将在Django随后对m2m的“清除”中消失。 解决方案:
在第二个处理程序中,检查“post_clear”操作。当您收到带有post_清除操作的信号时,Django已清除m2m,您有机会成功操纵它。
看见 https://docs.djangoproject.com/en/1.5/ref/signals/#m2m-changed |
|
|
5
0
您可以在此线程中找到更多信息: Django manytomany signals? |
|
|
6
0
更新m2m的解决方案之一,同时更新您的一个型号。
首先,通过管理面板的所有请求都是原子的。您可以查看ModelAdmin:
在更新过程中,当您对m2m记录所做的更改未保存时,即使在您的模型或信号中的保存方法中进行了更改,您可以观察到的行为仅发生在主对象更新后,因为m2m表单重写了所有记录。 这就是为什么一步一步地:
不幸的是,此解决方案的缺点是,您对m2m的更改将在单独的事务中执行。 |
|
|
Stan Reduta · 在创建Django记录期间访问主键/id值 8 年前 |
|
|
Aditya Singh · 在创建超级用户功能之前发出保存后信号 10 年前 |
|
|
MarkO · post_save错误消息“没有属性 13 年前 |