我需要在保存后操纵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。
谢谢!
答案 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():
# ...