Почему мой сигнальный файл Django не работает после его настройки?

Я пытаюсь отправить электронное письмо продавцу после того, как покупатель завершает оплату, но столкнулся с некоторыми проблемами, и письмо не было отправлено. Я добавил оператор print и блок try-except, чтобы использовать их для отладки, но оператор print не вывел в консоль никакой информации, а блок try тоже не вернул в консоль ни сообщения об успехе, ни сообщения об ошибке. Пожалуйста, помогите. Вот мой файл signals.py

# Stdlib Imports
import uuid

# Django Imports
from django.db.models.signals import pre_save, post_save
from django.dispatch import receiver
from django.core.mail import send_mail
from django.conf import settings

# Own Imports
from payment.models import PaymentHistory


@receiver(pre_save, sender=PaymentHistory)
def create_ref_code_if_does_not_exist(sender, instance, **kwargs):
    """
    Creates a reference code that will be used by paysack;
    if one does not exist.
    """

    if not instance.ref_code:
        instance.ref_code = uuid.uuid4()


@receiver(post_save, sender=PaymentHistory)
def send_payment_notification_email(sender, instance, created, **kwargs):
    if created and instance.status == 'completed':
        print("PaymentNotificationEmail signal triggered.") # For debugging 
        # PaymentHistory model has a ForeignKey to the BuyerOrderHistory model
        buyer_order = instance.order

        # BuyerOrderHistory has a ForeignKey to the Product model
        product = buyer_order.product

        # Get the seller's email address and name
        seller_email = product.user.email
        seller_name = product.user.full_name  

        # Compose the email subject and message
        subject = 'Product Payment Notification'
        message = f'Hello {seller_name},\n\n'
        message += f'The product "{product.title}" has been paid for.\n'
        message += f'Amount Paid: {instance.amount}\n\n'
        message += 'Log in to your account to manage the order.'

        # Send the email
        try:
            send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [seller_email])
            print("Email sent successfully.")
        except Exception as e:
            print(f"Error sending email: {e}")

Мой apps.py файл выглядит следующим образом

from django.apps import AppConfig


class PaymentConfig(AppConfig):
    default_auto_field = "django.db.models.BigAutoField"
    name = "payment"

    def ready(self):
        """Import payment signals when app load."""
        import payment.signals


Это мой payment/models.py файл:

class PaymentHistory(ObjectTracker):
    user_email = models.EmailField(
        max_length=255, help_text="THe user email address.", editable=False
    )
    order = models.ForeignKey(
        BuyerOrderHistory,
        on_delete=models.DO_NOTHING,
        help_text="The order on-which the payment action was initiated for.",
    )
    amount = models.FloatField(
        help_text="The naira amount of the payment.", null=True, blank=True
    )
    status = models.CharField(
        choices=PaymentStatus.choices, default="pending", max_length=100
    )
    remark = models.CharField(
        max_length=300, help_text="What is this payment transaction for?"
    )

Поле "Статус" имеет стандартное значение "Ожидание", но когда покупатель завершит сделку и она будет проверена, значение будет обновлено до "Завершено".

У меня settings.py установлено приложение

INSTALLED_APPS = [
    ...
    "payment",
    ...
]

Я попробовал запустить код, и операция прошла успешно, но письмо в сигнальном файле не было отправлено. Такое впечатление, что мой сигнальный файл вообще не срабатывает.

Вернуться на верх