Django 是否有一个可重复使用的方便函数来更新ManyToManyField的值而不首先清除它?

Django 是否有一个可重复使用的方便函数来更新ManyToManyField的值而不首先清除它?,django,Django,查看Django源代码,我发现在分配给ManyToManyField时,在添加新值之前,会删除所有现有值: 当我的应用程序运行时,这种幼稚的算法将带来巨大的数据库搅动,它一次更新数十万个这样的关系 因为,在我的情况下,大多数更新都是noop,即当前值和新值相同,所以我可以通过使用一种算法更新M2M字段,首先检查哪些对象需要添加,然后检查哪些对象需要删除,从而轻松减少搅动 这似乎是一种常见的模式,我想知道是否已经存在一个可重用的函数来执行此操作?但是,如果要分配给多个字段,就像是说删除所有预先存在

查看Django源代码,我发现在分配给ManyToManyField时,在添加新值之前,会删除所有现有值:

当我的应用程序运行时,这种幼稚的算法将带来巨大的数据库搅动,它一次更新数十万个这样的关系

因为,在我的情况下,大多数更新都是noop,即当前值和新值相同,所以我可以通过使用一种算法更新M2M字段,首先检查哪些对象需要添加,然后检查哪些对象需要删除,从而轻松减少搅动


这似乎是一种常见的模式,我想知道是否已经存在一个可重用的函数来执行此操作?

但是,如果要分配给多个字段,就像是说删除所有预先存在的条目并添加此条目。否则,您将使用add方法。正确吗?在我的应用程序中,大多数情况下,预先存在的值和新值将相同,或者基本相同,可能会添加一个新值,或者删除一个新值。我确信这是一个常见的问题:我想让列表a看起来像列表B,而不必先删除列表a中的所有元素,然后再添加列表B中的所有元素。然后,查询集上的按位重载运算符&and |可能有助于实现您所需的功能。