我已经了解了django信号但是,我不知道在我的项目中实现的位置以及如何在我的项目中使用它。在我的项目中,我想发送电子邮件警报,如果它符合某些特定标准。在这种情况下,我需要使用post_save信号。我添加了代码。请分享您的想法。
models.py
class Personal(models.Model):
user = models.OneToOneField(User)
email = models.EmailField(max_length=100, blank=True, null=True)
country = models.CharField(max_length=100, blank=True, null=True)
state = models.CharField(max_length=100, blank=True, null=True)
city = models.CharField(max_length=100, blank=True, null=True)
class Skills(models.Model):
user = models.ForeignKey(User)
skill = models.CharField(max_length=100, blank=True, null=True)
class jobs(models.Model):
emp = models.ForeignKey(User, unique=False)
title = models.CharField(max_length=100)
industry = models.CharField(max_length=100)
functionalarea = models.CharField(max_length=100)
min_exp = models.IntegerField(default=0)
max_exp = models.IntegerField(default=0)
city = models.CharField(max_length=100)
state = models.CharField(max_length=100)
country = models.CharField(max_length=100)
empskills = models.CharField(max_length=100, blank=True, null=True)
在这里,我希望将jobs&empskills of jobs表与personal.city和Skills.skill模型进行匹配。如果每个作业都匹配任何一个字段,它将自动发送邮件到personal.email,则会发生此事件。请举例说明信号的使用地点和方式。
答案 0 :(得分:8)
在模型外部编写一个函数,用于处理发布新作业的时间并找到要发送电子邮件的人员。
然后,您为Job
信号指定sender
作为post_save
并连接该功能。
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=Job)
def handle_new_job(sender, **kwargs):
job = kwargs.get('instance')
logger.info("POST_SAVE : Job : %s" % job)
# find people to email based on `job` instance
答案 1 :(得分:3)
这是如何使用post_save
的示例from django.db.models.signals import post_save
from .models import MyModel
def my_handler(**kwargs):
if kwargs[’raw’]:
return
...
# here you could return your mails
post_save.connect(my_handler, sender=MyModel)
希望这可以帮到你!