Ich möchte eine E-Mail senden, wenn ein bestimmtes Feld in einem Modell geändert wird. Ist es möglich? Hier ist, was ich suche. Ich habe ein Profilmodell, das ein BooleanField enthält. Wenn der Administrator true wählt, möchte ich dem Benutzer eine E-Mail senden. Ich weiß, ich könnte es in ein "def save (Selbst):", aber das feuert eine E-Mail immer wenn das Modell geändert wird und das Feld ist wahr. Gibt es eine Möglichkeit, nur eine E-Mail zu erhalten, wenn das Feld von "False" zu "True" geändert wurde?Django - E-Mail senden bei Modellwechsel
Antwort
speichern Methode ist ein perfekt guter Ort für das, was Sie tun möchten:
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()
Verwenden einer Funktion mit Ihren Modellen Haken post_save mit django Signale (http://docs.djangoproject.com/en/dev/ref/signals/#django.db.models.signals.post_save)
In dieser Funktion Gebrauch Standard Django-Mailing: http://docs.djangoproject.com/en/dev/topics/email/
Sie haben nicht den alten Wert in post_save, daher gibt es keine Möglichkeit zu wissen, ob sich der Wert tatsächlich geändert hat oder nicht. –
Sie können django-model-changes verwenden, um dies ohne eine zusätzliche Datenbanknachschlag zu tun:
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
das funktionierte wirklich gut für meine Anforderungen .. – Amistad
Ich bin froh, dass es hilfreich war! –
Etwas Ähnliches könnte helfen, und sendet nur eine E-Mail, wenn eine Veränderung von false auf 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. Email Templat in django
- 2. Toggle $ setValidity nach Modellwechsel
- 3. Trigger benutzerdefinierte AngularJS Form Validierung bei Modellwechsel
- 4. Email xlsx Befestigung Django
- 5. sende activate-email mit django-registration
- 6. $ http.get ('URL', {params: {email: email}}); Anfrage mit leeren params Senden
- 7. Angular 2 Modellwechsel anhören
- 8. Ereignishandler Modellwechsel in knockout.js
- 9. Senden Sie EMail mit asp.net mvc
- 10. django-social-auth: nicht speichern twitter's email
- 11. django-allauth set username wie email
- 12. django + sende email in html mit django-registrierung
- 13. HTML 5 Browser-Popup bei Eingabe mit type = "email"
- 14. E-Mail senden in django.
- 15. Wie Devise 'from' email
- 16. HTML EMail Vorlage
- 17. Angularjs: Modellwechsel in einer Direktive anhören
- 18. Angularjs bootstrap popover blinken nach dem Modellwechsel
- 19. mailR: wie rmarkdown dokumente als body in email senden?
- 20. PHP Senden einer HTML-EMAIL-Seite von einer Website
- 21. kann nicht git send-email verwenden, Quellcode und Patches senden
- 22. Amazon Simple Email Service - Müssen Sie E-Mail senden
- 23. Go smtp send email
- 24. PostageApp Email Ausgabe
- 25. Django kann keine E-Mail senden
- 26. Django Sellerie - Kann keine Verbindung zu amqp: //[email protected]: 5672 //
- 27. iphone app sende email
- 28. Email Konfiguration Laravel
- 29. Span verschwinden bei senden
- 30. parse password reset email
Ich könnte die if-Anweisung, um diese Änderung: wenn nicht == self.field old.field: – ShawnMilo
Er möchte E-Mails nur senden, wenn der Wert von False in True geändert wurde. Es ist nicht genug, zu überprüfen, ob die Werte nicht gleich sind. –
War auf der Suche nach einer Möglichkeit, eine Aktion auszulösen, wenn ein Modell geändert wird ... sieht so aus. Vielen Dank. –