多对多字段保存到数据库后调用 post_save

Posted

技术标签:

【中文标题】多对多字段保存到数据库后调用 post_save【英文标题】:Call post_save after many to many fields are saved in database 【发布时间】:2018-06-11 10:12:06 【问题描述】:

我有模特

class UserPermission(models.Model):
    user = models.OneToOneField(User)
    user_type = models.ManyToManyField(UserType)
    persona = models.ManyToManyField(Persona)

并发布保存信号

@receiver(post_save, sender=UserPermission)
def post_save_user_permissions(sender, instance, **kwargs)
    """
    Depending on selected UserType and Persona for a user, Update some other model
    """
    pass

我想要保存后信号中两个 m2m 字段的所有更新值。但这里的问题是在将 m2m 字段保存到 db 之前调用了 post save 信号。

我可以使用 m2m_changed 信号,但是有两个 m2m 字段,我无法关联或链接这两个信号

一旦模型中的所有 m2m 字段都保存到数据库中,是否仍然调用 post_save。

【问题讨论】:

如果您找到解决此问题的方法,您可以发布答案吗? 【参考方案1】:

两种可能:

UserType 上尝试 post_save 尝试使用through 命名中间表,如through='UserPermissionType' 并尝试UserPermissionType 上的post_save

我希望我给了你足够的线索来找到解决方案。

【讨论】:

是的,如果只有一个 m2m 字段,但我在 UserPermission 模型中有两个 m2m 字段。我想在这些 m2m 字段保存到数据库后做一些事情。

以上是关于多对多字段保存到数据库后调用 post_save的主要内容,如果未能解决你的问题,请参考以下文章

在中间模型中保存多对多字段数据的问题

保存到多对多关系

如何使用 django rest 框架保存多对多字段对象

如何在 django 中处理未保存的多对多关系?

如何保存具有直通关系的多对多字段

复制多对多值