1

当模型的 ManyToMany 字段更新并发送 m2m_changed 信号时,我将在 pk_set 参数中获取该关系的每个项目,以前相关的项目和新项目。这是正确的行为吗?我期望只有新项目或添加到关系中的多个项目出现在 pk_set 中。

如果这是预期的行为,除了使用 post_add 信号并将已经与模型关联的项目列表与传入列表进行比较之外,是否有更好的方法来仅将新项目添加到关系中?

编辑:似乎 pre_add 中没有与 ManyToMany 字段相关的项目,那么所有项目都在 post_add 上。

编辑 2:好的,所以在添加项目列表之前清除了多对多关系,接收 pre_clear 和 post_clear 操作。不知道我应该如何获得一组项目如何变化的差异。

4

2 回答 2

0

在 save_model() 中的模型管理中,进行这种比较似乎更好。在那里我可以获得原始对象和正在应用的表单。

于 2013-10-03T19:00:49.697 回答
0

在 Django 1.9 之前,通过直接赋值在 m2m 字段上设置对象将调用clear然后add.

这可能是您观察到的行为。从 Django 1.9 开始,只处理差异。

如果您需要旧的行为,您可以传递clear=Trueset相关管理器上的方法。

https://docs.djangoproject.com/en/dev/releases/1.9/#related-set-direct-assignment

于 2021-12-30T21:52:24.040 回答