Desidero inviare un messaggio di posta elettronica quando un campo specifico viene modificato in un modello. È possibile? Ecco cosa sto cercando. Ho un modello di profilo che include un campo booleano che, quando l'amministratore seleziona true, desidero inviare un messaggio all'utente. So che potrei metterlo in un "def save (self):" ma, quello spara via un'e-mail ogni volta che il modello viene cambiato e il campo è vero. C'è un modo per avere solo e-mail se il campo è stato modificato da False a True?Django - invia e-mail sul cambio di modello
risposta
Salva metodo è perfettamente buon posto per quello che si vuole fare:
def save(self):
if self.id:
old_foo = Foo.objects.get(pk=self.id)
if old_foo.YourBooleanField == False and self.YourBooleanField == True:
send_email()
super(Foo, self).save()
con il gancio di una funzione con i tuoi modelli post_save utilizzando segnali Django (http://docs.djangoproject.com/en/dev/ref/signals/#django.db.models.signals.post_save)
In tale standard uso funzione mailing django: http://docs.djangoproject.com/en/dev/topics/email/
Non si avrà il vecchio valore in post_save, quindi non ci sarebbe alcun modo di sapere se il valore è effettivamente cambiato o meno. –
È possibile utilizzare django-model-changes per eseguire questa operazione senza una ricerca di database aggiuntiva:
from django.db import models
from django.dispatch import receiver
from django_model_changes import ChangesMixin
class MyModel(ChangesMixin, models.Model):
flag = models.BooleanField()
@receiver(pre_save, sender=MyModel)
def send_email_if_flag_enabled(sender, instance, **kwargs):
if instance.previous_instance().flag == False and instance.flag == True:
# send email
questo ha funzionato davvero bene per le mie esigenze .. – Amistad
Sono contento che sia stato utile! –
Qualcosa di simile potrebbe aiutare e invia una e-mail solo quando il cambiamento da false a true
#models.py
from django.contrib.auth.models import User
from django.db.models import signals
from django.db import models
from django.dispatch import receiver
from django.db.models.signals import pre_save
from django.conf import settings
from django.core.mail import send_mail
#signal used for is_active=False to is_active=True
@receiver(pre_save, sender=User, dispatch_uid='active')
def active(sender, instance, **kwargs):
if instance.is_active and User.objects.filter(pk=instance.pk, is_active=False).exists():
subject = 'Active account'
mesagge = '%s your account is now active' %(instance.username)
from_email = settings.EMAIL_HOST_USER
send_mail(subject, mesagge, from_email, [instance.email], fail_silently=False)
- 1. invia activate-email con django-registration
- 2. Invia email con modello (Mandrill PHP)
- 3. Email template in Django
- 4. iphone app invia email
- 5. Invia email automatica programmaticamente
- 6. invia email asp.net C#
- 7. 10 backbone js, vista di aggiornamento sul cambio di modello
- 8. Email Django
- 9. django comportamento di cambio modello per silent_variable_failure = False
- 10. Invia email asincrona con phpmailer
- 11. Batch Invia email con SwiftMailer
- 12. Invia email programmaticamente su Android
- 13. Invia email in modo sicuro
- 14. Cambio di password Django modulo di visualizzazione
- 15. invia modello mandrill javascript
- 16. Invia email di massa con ASP.Net
- 17. Rails invia un email di linea?
- 18. personalizzato risparmiare metodo sul modello - Django
- 19. basata sul cambio dom
- 20. test Django email backend
- 21. Digestione email Django
- 22. django Autenticazione dell'utente campo email
- 23. Invio di email HTML in django
- 24. Richiamata DialogFragment sul cambio di orientamento
- 25. jenkins non invia email a più destinatari
- 26. Invia email HTML via C# con SmtpClient
- 27. Invia email tramite Google Apps in C#
- 28. Email che invia le migliori pratiche?
- 29. Invia pagina HTML Come email utilizzando "mutt"
- 30. Invia email a più indirizzi Android
mi potrebbe cambiare l'istruzione if a questo: se non old.field == self.field: – ShawnMilo
Vuole inviare email solo quando il valore è cambiato da False a True. Quindi controllare che i valori non siano uguali non è abbastanza. –
Cercavo un modo per attivare un'azione quando un modello è cambiato ... sembra che sia così. Grazie. –