Tôi muốn gửi email khi một trường cụ thể được thay đổi trong một mô hình. Có thể không? Đây là những gì tôi đang tìm kiếm. Tôi có một mô hình hồ sơ bao gồm một BooleanField rằng khi người quản trị chọn là đúng, tôi muốn gửi cho người dùng một email. Tôi biết tôi có thể đặt nó trong một "def save (self):" nhưng, điều đó sẽ kích hoạt email bất cứ lúc nào mô hình được thay đổi và trường là đúng. Có cách nào để có nó chỉ email nếu lĩnh vực đã được thay đổi từ False thành True?Django - gửi email về thay đổi mô hình
Trả lời
tiết kiệm phương pháp là một nơi hoàn toàn tốt cho những gì bạn muốn làm:
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()
Sử dụng treo một chức năng với các mô hình của bạn post_save sử dụng tín hiệu django (http://docs.djangoproject.com/en/dev/ref/signals/#django.db.models.signals.post_save)
Trong đó tiêu chuẩn chức năng sử dụng gửi thư django: http://docs.djangoproject.com/en/dev/topics/email/
Bạn sẽ không có giá trị cũ trong post_save, vì vậy sẽ không có bất kỳ cách nào để biết liệu giá trị có thực sự thay đổi hay không. –
Bạn có thể sử dụng django-model-changes để thực hiện việc này mà không cần tra cứu cơ sở dữ liệu bổ sung:
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
điều này làm việc thực sự tốt cho các yêu cầu của tôi .. – Amistad
Tôi rất vui vì nó rất hữu ích! –
Something như thế này có thể giúp đỡ và chỉ gửi một email khi thay đổi từ false thành 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. Gửi email HTML bằng django
- 2. Không thể gửi email - Django
- 3. Django admin thay đổi tên mô hình số nhiều
- 4. django để gửi VÀ nhận email?
- 5. Sequelize: Thay đổi sơ đồ mô hình về sản xuất
- 6. django + gửi email bằng html với đăng ký django
- 7. django-allauth email HTML không gửi
- 8. Gửi email-Trình mô phỏng Iphone
- 9. Node.js - Gửi email về đăng ký
- 10. Tự động tạo PDF và gửi email bằng django
- 11. ChoiceField trong mô hình Django
- 12. gửi email kích hoạt với đăng ký django
- 13. Email Django
- 14. Gửi email có tệp đính kèm trong django
- 15. Thay đổi mô hình tài liệu CouchDB?
- 16. Entity Framework mô hình thay đổi lỗi
- 17. Gửi hình ảnh nội tuyến qua email
- 18. Báo cáo email báo lỗi Django không được gửi
- 19. EmailBackend để gửi email qua nhiều SMTP ở Django
- 20. Gửi email từ Django qua máy chủ SMTP
- 21. Mô hình Django - chỉ định id thay vì đối tượng
- 22. Gửi email trong asp.net với tên cụ thể thay vì email người gửi
- 23. django: Thay đổi giá trị mặc định cho lớp mô hình mở rộng
- 24. django: làm thế nào để thay đổi giá trị cho nullbooleanfield trong một mô hình?
- 25. django quản trị save_model không tiết kiệm mô hình thay đổi
- 26. Theo dõi các thay đổi kể từ lần lưu cuối cùng trong các mô hình django
- 27. Thay đổi tên mô hình lớp trong giao diện quản trị Django
- 28. Theo dõi thay đổi đối với trường hợp Mô hình Django
- 29. Django: Thay đổi mô hình mà không xóa tất cả dữ liệu?
- 30. Nam - Không phát hiện thay đổi đối với mô hình Django
tôi có thể thay đổi câu lệnh if như sau: nếu không old.field == self.field: – ShawnMilo
Anh ấy chỉ muốn gửi email khi giá trị thay đổi từ False thành True. Vì vậy, kiểm tra các giá trị không bằng nhau là không đủ. –
Đã tìm cách kích hoạt bất kỳ hành động nào khi mô hình bị thay đổi ... trông giống như thế này. Cảm ơn. –