django - 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')
解决方案
阅读文档,我想发件人应该是中间模型,而不是 ManyToMany 字段本身。试试这个:
@receiver(m2m_changed, sender=Lease.user_ids.through)
推荐阅读
- mysql - MySQL 表约束要求列总和等于 1
- javascript - 禁用未测试文件的覆盖 - 开玩笑
- java - 使用 @Transactional(propagation = Propagation.REQUIRES_NEW) 注释的 Service 方法的 Spring Boot 集成测试
- r - 反应性对象在 r 闪亮的其他部分不起作用,除非输出时
- python - 如何从其 16 位十六进制码输出 unicode?
- momentjs - 即时操作日期不起作用
- python - 找不到满足 menuinst 要求的版本(来自 conda)
- javascript - 有没有办法使用 http-vue-loader 在组件中加载组件
- php - 如何制作动态的月、日、年错误信息
- node.js - 查找刚刚在路由中创建的用户的_id