ManyToManyField在post_save信号中不可用

时间:2013-05-14 09:34:04

标签: python django signals

我需要在保存后操纵Django模型中的数据,但我还需要访问ManyToManyField。

这就是我想要做的事情:

class Lab(Model):
  institute = ManyToManyField(Institute)

def post_save_lab(sender, instance, created, *args, **kwargs):
  if not instance.institute.all():
    # Data processing...

post_save.connect(post_save_lab, sender=Lab)

问题是,当时instance.institute.all()总是空的......我怎么知道实验室是否有研究所?

我指定信号m2m_changed不能解决问题,因为如果ManyToMany关系中没有元素,则必须完成数据处理。因此不会调用m2m_changed。

谢谢!

2 个答案:

答案 0 :(得分:0)

在保存模型实例之前,无法保存 m2m 。如果您在保存信号中创建对象created==True时正在寻找 m2m 实例,那么它将始终为空。

我认为你可以拥有m2m_changed信号的处理程序。

答案 1 :(得分:-1)

您可以覆盖保存方法:

class Lab(Model):
    institute = ManyToManyField(Institute)

    def save(self, *args, **kwargs):
        super(Lab, self).save(*args, **kwargs)
        # ... do something with the many to many
        # example:
        # if self.institute.all().exists():
        #     ...