【发布时间】:2020-04-08 21:02:38
【问题描述】:
我有一个Order (1) 和OrderLine (n) 模型,这里的订单可以有多个订单行。这全部运行在 Django-admin 内部,OrderLine 被设置为OrderAdmin(admin.ModelAdmin) 上的inlines 的一部分。
简化如下:
class OrderLine(admin.StackedInline):
pass
@admin.register(Order)
class OrderAdmin(admin.ModelAdmin):
inlines = [OrderLine]
我在两种型号上都注册了pre_save 和post_save。 Django 按以下顺序调用这些信号:
- 订购 | pre_save
- 订购 | post_save
- 订单行 1 | pre_save
- 订单行 1 | post_save
- 订单行 2 | pre_save
- 订单行 2 | post_save
- 订单行n | pre_save
- 订单行n | post_save
我遇到的问题是我想更改调用信号的顺序,如下所示:
- 订购 | pre_save
- 订单行 1 | pre_save
- 订单行 1 | post_save
- 订单行 2 | pre_save
- 订单行 2 | post_save
- 订单行n | pre_save
- 订单行n | post_save
- 订购 | post_save
因为我需要在每个OrderLine 中进行一些计算,并且这些结果需要在Order 帖子中使用。但是post signal 已经被调用了。
我看到的唯一解决方案是在每个 OrderLine post signal 上调用我的代码,这有点多余,尤其是当您有很多订单行时。
解决这个问题最好/更好的方法是什么?
【问题讨论】:
-
你可以在
Order的pre_save信号中调用保存OrderLine1,2,N。 -
@SergeyPugach 不确定您的意思,您如何在
pre_save中保存订单行?当我在Order中使用post_save时,我仍然看到每个OrderLine的旧数据。所以这不起作用,这是有道理的,因为我可以看到在保存Order后订单行已更新。 -
您能否在模型中添加代码以及现在保存 Order 和 OrderLine 的那部分代码&
-
@SergeyPugach 好吧,我认为这没什么用。这是在
admin.ModelAdmin中运行的,所以代码不多。除了pre_save和post_save的两个函数。我会更新我的问题,因为这是相关的。 -
你分享了来自
admin.py的内容,但我从models.py询问了你的模型。
标签: django django-models django-admin django-signals