Для этого вам не нужны сигналы, так как часть потока платежей (каркаса) обеспечивает представление: PaymentDetailsView
, которое со временем реализует миксин OrderPlacementMixin
.
В таком миксине вы 'я найду метод: handle_successful_order
, который является правильным местом для отправки сообщений, и сделаю другие вещи, убедившись, что заказ был размещен.
Так что не форк order
app, форк checkout
appи переопределите этот метод, чтобы сделать что-то вроде этого:
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)
Если вы прочитаете код этого метода в Оскаре, вы увидите, что именно там Оскар уведомляет пользователя о порядке, который былтолько что помещен.
Конечно, мы не можем игнорировать строку документации, которая гласит:
Переопределить это представление, если вы хотите выполнять настраиваемые действия при отправке заказа.
def handle_successful_order(self, order):
"""
Handle the various steps required after an order has been successfully
placed.
Override this view if you want to perform custom actions when an
order is submitted.
"""
# Send confirmation message (normally an email)
self.send_confirmation_message(order, self.communication_type_code)
# Flush all session data
self.checkout_session.flush()
# Save order id in session so thank-you page can load it
self.request.session['checkout_order_id'] = order.id
response = HttpResponseRedirect(self.get_success_url())
self.send_signal(self.request, response, order)
return response