Django 管理员在新条目或模型更新时发送电子邮件

Django Admin send email upon new entry or update on models

想寻求有关如何发送电子邮件的帮助。所以我有一个物流应用程序的基本跟踪应用程序。当我在 django admin 的数据库中添加新条目(名称、电子邮件、phone 号码、跟踪号码、货物接收日期..)或更新数据库(更新货物接收日期..)时,我希望它向客户的电子邮件地址发送电子邮件以获取更新。

我的models.py是

class Tracking2(models.Model):
MODE_CHOICES = (
    ('Air Freight', 'Air Freight'),
    ('Sea Freight', 'Sea Freight'),
)

name = models.CharField(max_length=255)
contact_number = models.CharField(max_length=255)
email_address = models.CharField(max_length=150, default='Email Address')
mode = models.CharField(max_length=255, choices=MODE_CHOICES)
tracking_number = models.CharField(max_length=255)
cargo_received_date = models.DateField(null=True, blank=True)
cargo_received_details = models.CharField(null=True, max_length=255,blank=True)
out_for_delivery_date = models.DateField(null=True, blank=True)
out_for_delivery_details = models.CharField(null=True, max_length=255,blank=True)
arrived_at_region_date = models.DateField(null=True, blank=True)
arrived_at_region_details = models.CharField(null=True, max_length=255,blank=True)
departed_shipping_facility_date = models.DateField(null=True, blank=True)
departed_shipping_facility_details = models.CharField(null=True, max_length=255,blank=True)
cargo_delivered_date = models.DateField(null=True, blank=True)
cargo_delivered_details = models.CharField(null=True, max_length=255,blank=True)

class Meta:
       verbose_name_plural = "Italy"


def save(self, *args, **kwargs):
    return super(Tracking2, self).save(*args, **kwargs)

我的admin.py是

 from daterange_filter.filter import DateRangeFilter
from django.contrib import admin
from .models import Tracking2
from import_export import resources
from import_export.admin import ImportExportModelAdmin
from rangefilter.filter import DateRangeFilter, DateTimeRangeFilter


    
class Tracking2Resources(resources.ModelResource):
    class Meta:
        model = Tracking2

class Tracking2Admin(ImportExportModelAdmin):
    resource_class= Tracking2Resources
    search_fields = ('name', 'contact_number', 'tracking_number','out_for_delivery_details' )
    list_display = ("name","contact_number","mode","tracking_number", "cargo_received_date","cargo_received_details",
        "out_for_delivery_date","out_for_delivery_details","arrived_at_region_date",
        "arrived_at_region_details","departed_shipping_facility_date",
        "departed_shipping_facility_details","cargo_delivered_date",
        "cargo_delivered_details")
    list_filter = (
        ("cargo_received_date", DateRangeFilter),
        'mode'
    )
admin.site.register(Tracking2, Tracking2Admin)

有人可以建议我应该添加什么以使我的应用程序在有新条目或更新时发送更新吗?

谢谢。

使用 Django 信号 post_save 并在那里描述您想要的逻辑。

@receiver(post_save, sender= Tracking2)
def send_tracking_email(sender, instance, **kwargs):
    send_email() # this is your function to send email

这里的 instance 是保存的 Tracking2 实例,因此您可以使用它来构建电子邮件的数据。 在这里阅读更多:https://docs.djangoproject.com/en/3.1/ref/signals/

更新: 还有一点,如果您只需要为新实例发送电子邮件,则添加以下条件:

@receiver(post_save, sender= Tracking2)
def send_tracking_email(sender, instance, created, **kwargs):
    if created:
        send_email() # this is your function to send email