如何在Django应用中正确为Order模型连接post_save信号?
解决Django post_save信号中无法获取Order模型字段的问题
你当前的信号处理器已经接收到了保存后的Order实例,只是没通过instance参数去访问字段。instance就是刚完成保存操作的Order模型对象,直接用它就能获取billing_status、created等所有字段的值。
修改信号处理器代码如下:
from django.db.models.signals import post_save from django.dispatch import receiver from orders.models import Order @receiver(post_save, sender=Order) def inventory_handler(sender, instance, created, *args, **kwargs): print('First step') # 直接通过instance访问模型字段 print(f"订单创建时间: {instance.created}") print(f"支付状态: {instance.billing_status}") print(f"订单总金额: {instance.total_paid}") # 其他字段可按同样方式访问,比如instance.full_name、instance.phone等 print(args, kwargs)
额外验证要点:
- 确保项目
settings.py的INSTALLED_APPS中,你的应用是用orders.apps.OrdersConfig注册的,而非直接写orders——只有这样,apps.py里的ready方法才会执行,信号才能正确连接。 - 如果是更新订单触发的信号,
kwargs里的update_fields会列出本次修改的字段;如果是批量更新操作,post_save信号不会被触发,这种场景下需要单独处理。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

