Отправка электронной почты при создании модели - django

Я хочу автоматически отправлять электронное письмо при создании счета-фактуры. Возможно ли это? Что мне нужно. У меня есть модель счета и я поместил в нее код send_email "def save(self):", я делаю систему счетов perfex CRM, поэтому я использую ключ foregin в модели счета для получения клиента, но всякий раз, когда я создаю новый счет, он говорит "Счет "INV-b066" был добавлен успешно. ", но в модели инвойса ничего не отображается, как будто это пустая модель. Я даже пытался открыть инвойс, используя индексный номер, перезапустил сервер и миграции, и это не сработало, но если я удалю функцию def save(self):, она работает совершенно нормально. Я пытаюсь отправить электронное письмо автоматически при создании модели

Модель клиента

class Customers(models.Model):
    Your_Name = models.CharField(max_length=220)
    Email_Address = models.EmailField(max_length=220)
    Profession = models.CharField(max_length=220)
    phone = PhoneNumberField(unique=True)
    No_of_Persons = models.IntegerField()
    Packages = models.CharField(choices=PAKAGES, max_length=100)
    Address = models.CharField(max_length=220)
    City = models.CharField(choices=CITIES, max_length=10)
    Time = models.CharField(choices=TIME, max_length=10)
    Date = models.DateTimeField()
    Message = models.TextField()

    def __str__(self):
        return f'{self.Your_Name}'

Модель счета-фактуры

class Invoice(models.Model):
    Customer = models.ForeignKey(Customers, on_delete=models.CASCADE)
    Invoice_Number = models.CharField(default=inv_num, max_length=10)
    Recurring = models.CharField(choices=Recurrings, max_length=12)
    Invoice_date = models.DateField()
    Due_date = models.DateField()
    Packages = models.CharField(choices=PAKAGES, max_length=100)
    Package_name = models.CharField(max_length=50)
    Package_description = models.TextField()
    Package_Quantity = models.IntegerField()
    Package_Price = models.IntegerField()

    def __str__(self):
        return f'{self.Invoice_Number}'

    def save(self):
        send_mail(
            'Subject',
            'message.',
            'email@example.com',
            ['*****@gmail.com'],
            fail_silently=False,
        )

Вы должны фактически сохранить счет-фактуру следующим образом:

def save(self):
    send_mail(
        'Subject',
        'message.',
        'email@example.com',
        ['*****@gmail.com'],
        fail_silently=False,
    )
    return super(Invoice, self).save()

Также в качестве предложения лучше отправлять email как отдельную задачу или сервис, для этого можно использовать django signals или celery.

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