访问django管理员中覆盖save()的更新M2M字段

Jon*_*han 2 overriding django-models django-forms django-admin

当我在admin中保存实例时,我想在模型的overriden save()方法中使用ManyToManyField的用户更新值.

事实证明,通过设计,django在调用save()之前不会更新M2M字段,但只有在save()完成后才能保存表单的一部分...

例如,在两个打印命令中,显示的值是用户在admin中更新模型实例之前的值:

class MyClass(models.Model):
    an_m2m_field = models.ManyToManyField(MyOtherCLass)
    def save(self, *args, **kwargs):
        print self.an_m2m_field.all()
        super(MyClass, self).save(*args, **kwargs) # Call the "real" save() method.
        print self.an_m2m_field.all()
Run Code Online (Sandbox Code Playgroud)

如何在覆盖save()中访问此字段的新值?

Jon*_*han 5

M2M字段独立于模型保存.为了在M2M领域的变化采取行动,注册到M2M领域的m2m_changed信号,详见这里.