【问题标题】:Django: removing item from many-to-many relation more efficientlyDjango:更有效地从多对多关系中删除项目
【发布时间】:2015-01-06 11:31:34
【问题描述】:

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

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)

【问题讨论】:

    标签: django many-to-many bulk


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-02-21
      • 2011-09-14
      • 2015-08-22
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      相关资源
      最近更新 更多