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

Han*_*Dai 2 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)
Run Code Online (Sandbox Code Playgroud)

Kev*_*nry 6

是.您可以使用该through属性访问基础M2M模型,然后使用该模型在一个查询中执行删除.

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