首页 > 解决方案 > Django 的 m2m_changed 触发器未正确触发

问题描述

我有一个如下所示的模型,我希望每次更改 user_ids 字段时触发一个方法。使用post_save信号显然没有做任何事情,因为多对多关系在这种情况下是特殊的。

class Lease(models.Model):
    unit = models.ForeignKey(Unit, on_delete=models.CASCADE)
    user_ids = models.ManyToManyField('user.User')

如下使用m2m_changed触发器也没有做任何事情,这让我很困惑。我真的不明白这段代码有什么问题,也试图将“.user_ids”排除在外。没有错误或任何东西,它只是在 Lease 模型中的 user_ids 更改时不会触发。

@receiver(m2m_changed, sender=Lease.user_ids)
def update_user_unit(sender, instance, **kwargs):
    print('Test')

标签: djangomany-to-many

解决方案


阅读文档,我想发件人应该是中间模型,而不是 ManyToMany 字段本身。试试这个:

@receiver(m2m_changed, sender=Lease.user_ids.through)

推荐阅读