使用Django Oscar信号

2024-09-30 18:29:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我想发送一个电子邮件,如果一个订单是下(目前只有用户谁已下订单收到电子邮件)。order_paced奥斯卡信号在这里对我有用。在

为此,我已经分叉了order应用程序,在这个应用程序中,order_placed函数是在signals.py中创建的。我也在config.py中导入了信号,但当我从站点下订单时,order_placed仍然没有被触发。在

有谁能分享奥斯卡信号用法的例子吗?在

代码:

config.py

from oscar.apps.order import config


    class OrderConfig(config.OrderConfig):
        name = 'catalogue.order'

        def ready(self):
            from oscar.apps.order import signals

signals.py

^{pr2}$

Tags: apps用户frompy订单importconfig应用程序
1条回答
网友
1楼 · 发布于 2024-09-30 18:29:51

这不需要信号,因为支付流(框架)的一部分oscar提供了视图:PaymentDetailsView,它及时实现了mixinOrderPlacementMixin。在

在这样的mixin中,您将找到方法:handle_successful_order,这是发送消息的正确位置,并执行其他操作以确保订单已被放置。在

因此,不要forkorderapp,forkcheckoutapp并重写此方法,以便执行以下操作:

from django.conf import settings

class PaymentDetailView:
    # ...
    def handle_successful_order(order):
        send_mail_to_admin(settings.ADMIN_EMAIL_ADDRESS)
        super(PaymentDetailView, self).handle_successful_order(order)

如果你在oscar中读这个方法的代码,你会发现这里确实是oscar通知用户刚刚下单的地方。在

当然,我们不能忽略docstring,它声明:

Override this view if you want to perform custom actions when an order is submitted.

^{pr2}$

相关问题 更多 >