Django:更有效地从多对多关系中删除项目

标签 django many-to-many bulk

我的图书类使用多对多字段来保存其读者。如果我想从某些书籍中删除读者,我可以使用循环遍历所有书籍对象以删除读者。但这太慢了。可以批量操作吗?

class Book(models.Model):
    readers = models.ManyToManyField(User, related_name='books')

#Remove reader 'foo' from book 1, 2, 3, 4, 5. However, it is slow.
for book in Book.objects.filter(id__in=[1, 2, 3, 4, 5])
    book.readers.remove(R)

最佳答案

是的。您可以使用through attribute访问底层M2M模型。 ,然后使用该模型在一个查询中执行删除操作。

Book.readers.through.objects.filter(book_id__in=[1, 2, 3, 4, 5], 
                                    user_id=foo_user)
                            .delete()

关于Django:更有效地从多对多关系中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26839115/

相关文章:

javascript - 使用 Jquery/JavaScript 在客户端浏览器中接收大量数据

Symfony/Doctrine - Twig_Error_Runtime : Catchable Fatal Error: Object of class Doctrine\ORM\PersistentCollection could not be converted to string

python - 如何使用过滤器查询Django模型

python - 如何与Django REST框架连接到前端

python - 从 django 加载多行夹具字段

python - 如何查询多对多关系中的空记录

node.js - 如何使用Sequelize.js建立表之间的多对多关系?

linux - 文件内部批量重命名,包括子目录

java - 有没有办法在 Java 中使用 "bulk assign" boolean 变量?

python - 我在 django 中的评论表单不起作用?它既不向数据库发送数据也不显示这些数据?