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
想寻求有关如何发送电子邮件的帮助。所以我有一个物流应用程序的基本跟踪应用程序。当我在 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