ManyToManyField不在post_save信号可用(ManyToManyField are

2019-10-18 03:10发布

我需要从它的储蓄后的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并不能解决问题,因为如果有在多对多关系NO元素,我的数据处理必须做到的。 为此m2m_changed将不会被调用。

谢谢!

Answer 1:

M2M不能保存,直到模型实例保存。 如果您正在寻找M2M情况下,当对象被创建created==True在后期保存信号那么这将是总是空的。

我想你可以有处理m2m_changed信号。



Answer 2:

您可以覆盖保存方法:

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():
        #     ...


文章来源: ManyToManyField aren't available in the post_save signal