1

我需要在保存 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。

谢谢!

4

2 回答 2

0

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

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

于 2013-05-14T09:39:55.210 回答
-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():
        #     ...
于 2013-05-14T11:19:05.803 回答