6

我已经了解了 django 信号,但是我不知道在我的项目中在哪里实现以及如何在我的项目中使用它。在我的项目中,如果它符合某些特定条件,我想发送电子邮件警报。在这种情况下,我需要使用 post_save 信号。我用这个添加了代码。请分享您的想法。

模型.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)

在这里,我想将工作表的 city 和 empskills 与 personal.city 和 Skills.skill 模型进行匹配。如果与任何一个字段匹配,则每次发布职位都会发生此事件,它将自动将邮件发送到personal.email。请给出示例一个在哪里以及如何使用信号。

4

2 回答 2

15

在模型之外编写一个函数,用于处理发布新工作并找到要发送电子邮件的人员。

然后,您将 指定Job为信号并连接该函数。senderpost_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
于 2013-08-09T05:20:22.097 回答
2

This is an example of how to use 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)

Hope this could help you !

于 2013-08-09T07:24:39.723 回答