Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

send email on model create – django

I want to send an email automatically when I create an invoice. Is that possible? What I’m after. I have a invoice model and I put send_email code in it "def save(self):", I’m making perfex CRM invoice system, so I’m using the foregin key in invoice model to get a customer, but whenever I create new invoice it says "The invoices “INV-b066” was added successfully." but in invoice model it shows nothing like it’s empty model I even tried to open invoice using index number and restarted the server and migrations stuff and it didn’t worked but if I remove def save(self): function it works perfectly fine I’m trying to send an email automatically on model create

Customer model

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}'

Invoice model

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

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,
        )

>Solution :

You have to actually save the invoice like this:

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

Also as a part of suggestion it is better to send email as separate task or service, you can use django signals or celery for that.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading