美文网首页
Django 的 m2m_changed

Django 的 m2m_changed

作者: alue | 来源:发表于2024-01-10 21:14 被阅读0次

    模型中具有多对多字段:

    class Advice(models.Model):
        departments = models.ManyToManyField('basic.Department')
    

    打算在模型建立时,向这个字段对应的用户发送消息,一开始的思路可能是这样做:

    class Advice(models.Model):
        departments = models.ManyToManyField('basic.Department')
    
        def send_message(self):
            send_to_departments(self.departments.all())
    
        def save(self, *args, **kwargs):
            super().save(*args, **kwargs)
            # 这样处理无效
            self.send_message()
    

    直接利用自定义save方法,这样是无效的。因为在save这个模型的时候,多对多的表还没有建立完成。

    这个时候,应该引入 m2m_changed 信号机制

    from django.db.models.signals import m2m_changed
    
    def departments_changed(sender, instance, action, **kwargs):
        if action == 'post_add':
            instance.send_message()
    
    m2m_changed.connect(departments_changed, sender=Advice.departments.through)
    

    这样,就确保了数据处理顺序的正确性。

    相关文章

      网友评论

          本文标题:Django 的 m2m_changed

          本文链接:https://www.haomeiwen.com/subject/odizndtx.html