Django如何使用post_save信号

时间:2013-08-09 05:13:54

标签: django

我已经了解了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,则会发生此事件。请举例说明信号的使用地点和方式。

2 个答案:

答案 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)

希望这可以帮到你!