Search code examples
djangodjango-signals

signals fire up at every user login instead of post_save


I have a small signal connected to post_save of the user model. I want it to only send an email on user creation and not on login as it does in this form.

I've tried with if created: but still sends email on login.

from django.db.models.signals import post_save

def save_profile(sender, instance, created, **kwargs):

        print("Signal patched")
        subject = 'New Order Created %s'%instance
        message = 'Order %s created at %s . Please check if needs further settings!'%(instance, datetime.now())
        emailFrom = 'test@test.com'
        emailTo = [settings.EMAIL_HOST_USER]
        send_mail(subject, message, emailFrom, emailTo, fail_silently=True)




post_save.connect(save_profile, sender=Order)

Solution

  • Trigger it only if it's created.

    def save_profile(sender, instance, created, **kwargs):
        if created:
            print("Signal patched")
            subject = 'New Order Created %s'%instance
            message = 'Order %s created at %s . Please check if needs further settings!'%(instance, datetime.now())
            emailFrom = 'test@test.com'
            emailTo = [settings.EMAIL_HOST_USER]
            send_mail(subject, message, emailFrom, emailTo, fail_silently=True)
    

    And it seems that it's connected to Order not to user:

    post_save.connect(save_profile, sender=User)