Deseo enviar un correo electrónico cuando se cambia un campo específico en un modelo. ¿Es posible? Esto es lo que estoy buscando. Tengo un modelo de perfil que incluye un BooleanField que cuando el administrador selecciona que es verdadero, quiero enviar un correo electrónico al usuario. Sé que podría ponerlo en "def save (self):" pero, eso dispara un correo electrónico cada vez que se cambia el modelo y el campo es verdadero. ¿Hay alguna forma de tenerlo solo por correo electrónico si el campo fue cambiado de False a True?Django - enviar correo electrónico sobre el cambio de modelo
Respuesta
Guardar método es un perfecto lugar para lo que quieres hacer:
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()
Uso enganchar una función con sus modelos post_save con señales de Django (http://docs.djangoproject.com/en/dev/ref/signals/#django.db.models.signals.post_save)
En ese estándar empleo Función django mailing: http://docs.djangoproject.com/en/dev/topics/email/
No tendrá el valor anterior en post_save, por lo que no habría forma de saber si el valor realmente ha cambiado o no. –
Puede usar django-model-changes para hacer esto sin una búsqueda de base de datos adicional:
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
esto funcionó muy bien para mis necesidades .. – Amistad
¡Me alegra que haya sido útil! –
Algo como esto podría ayudar y sólo envía un correo electrónico cuando el cambio de falso a verdadero
#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. django + enviar correo electrónico en html con django-registration
- 2. Django correo electrónico
- 3. django-registration - ¿cómo cambio example.com en el correo electrónico?
- 4. vb.net enviar correo electrónico
- 5. Enviar correo electrónico - Cocoa
- 6. enviar correo electrónico desde localhost
- 7. ¿Enviar correo electrónico de Elmah?
- 8. django send_mail con servidor SMTP no puede enviar correo electrónico
- 9. Django no enviar mensajes de correo electrónico a los administradores
- 10. Django correo electrónico resumen
- 11. django para enviar Y recibir un correo electrónico?
- 12. Enviar correo electrónico desde Cocoa
- 13. C# Enviar correo electrónico masivo
- 14. iphone app enviar correo electrónico
- 15. enviar correo electrónico asp.net C#
- 16. cómo enviar correo electrónico HTML
- 17. Node.js - Enviar correo electrónico en el registro
- 18. Enviar una tabla en el correo electrónico
- 19. MVC HTML5 enviar por correo electrónico
- 20. Enviar correo electrónico desde un desencadenador
- 21. Django: [correo electrónico protegido] en el administrador
- 22. Django auth.user con el correo electrónico única
- 23. Enviar correo electrónico-Simulador de Iphone
- 24. Guión de shell para enviar correo electrónico
- 25. ¿Cómo enviar archivos adjuntos de correo electrónico?
- 26. Enviar correo electrónico de activación al usuario
- 27. Enviar notificación por correo electrónico de Jenkins
- 28. Lote Enviar correo electrónico con SwiftMailer
- 29. Envío de correo electrónico HTML en Django
- 30. Problema de correo electrónico (enviar hipervínculo en el cuerpo del correo electrónico) android
que podría cambiar la sentencia if para esto: si no old.field == self.field: – ShawnMilo
Quiere enviar un correo electrónico solo cuando el valor cambió de False a True. Entonces, verificar que los valores no sean iguales no es suficiente. –
Estaba buscando una manera de activar cualquier acción cuando se cambia un modelo ... parece que es esto. Gracias. –