Почему мой сигнальный файл 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",
...
]
Я попробовал запустить код, и операция прошла успешно, но письмо в сигнальном файле не было отправлено. Такое впечатление, что мой сигнальный файл вообще не срабатывает.