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

2024-03-12

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

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)

是的。您可以使用以下方式访问底层 M2M 模型through属性 https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ManyToManyField.through,然后使用该模型在一个查询中执行删除操作。

Book.readers.through.objects.filter(book_id__in=[1, 2, 3, 4, 5], 
                                    user_id=foo_user)
                            .delete()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐