【问题标题】:Optimized query to match and exclude multiple ManyToMany entries优化查询以匹配和排除多个多对多条目
【发布时间】:2015-02-27 18:24:39
【问题描述】:

我正在开发一个标记系统,该系统需要查询具有多个标记的对象以及能够排除具有标记的对象。下面的代码是我正在进行的查询的一个简单示例。实际上,将匹配/排除任意数量的标签。我当前的实现工作但在大量数据上速度很慢。我正在寻找一种方法来加快这个查询。

class Model(models.Model):
    tags = models.ManyToManyField(Tag)

Model.objects.filter(tags=tag_1).filter(tags=tag_2).exclude(tags=tag_3)

【问题讨论】:

    标签: python django django-models query-optimization


    【解决方案1】:

    如果您已经在帮助下将该行确定为罪魁祸首,例如django-debug-toolbar 我会尝试两件事:

    • 使用 in 而不是不同的子句进行过滤

      Models.objects.filter(tags__in=[tag_1, tag_2])

    • 使用 ids 而不是对象进行过滤

      Model.objects.filter(tags__id=tag_1.id).filter(tags__id=tag_2.id)

    您甚至可以将两者结合起来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多