添加与模型的关系时触发信号

时间:2017-03-09 08:27:38

标签: django django-models

鉴于以下模型,已经创建了四个实例(A,B,C,D),我想在将公司添加到实例D时触发挂钩。

    class Foo(models.Model):
        name = models.CharField()
        description = models.TextField()
        company = models.ManyToManyField(Company)

我考虑使用post_save信号,但我不确定它是否是一个好方法。

2 个答案:

答案 0 :(得分:1)

对不起,我的不好。我误解了你的问题。如果您想要处理m2m字段的保存,最佳做法是使用m2m_changed信号。

通常,使用信号是一种很好的做法。这是他们创建的原因之一!

@receiver(m2m_changed, sender=Foo.company.through)
def handler(sender, instance, pk_set, action, **kwargs):
    if instance.name == 'D' and action == 'post_add' and instance.company is not None:
        ...

答案 1 :(得分:0)

尝试使用内置预保存信号。这样您就可以获取D实例并检查“公司”字段是否即将更改。然后添加一个钩子。

@receiver(pre_save, sender=Foo)
def foo_pre_save(sender, instance, **kwargs):
    try:
        foo = Foo.objects.get(name=D_name)
        if((foo.company == None) and (instance.company != None)):
            # do your hook here
    except Foo.DoesNotExist:
        # handle exception