1
我使用django,并且我有模型名称Tags
。Django计算其他模型中的一个模型的所有发生
它被用于15个不同的模型accros我的整个应用ManyToManyField。
我需要得到所有特定标签发生的len
/count
。
我是怎么这样做的?我必须使用Aggregate/annotate吗?选择相关?或者完全不同的东西。当然,使用forloops不是一个选择。
我使用django,并且我有模型名称Tags
。Django计算其他模型中的一个模型的所有发生
它被用于15个不同的模型accros我的整个应用ManyToManyField。
我需要得到所有特定标签发生的len
/count
。
我是怎么这样做的?我必须使用Aggregate/annotate吗?选择相关?或者完全不同的东西。当然,使用forloops不是一个选择。
如果您希望能够在一个请求中查询与某个标签相关的项目数量,那么您应该使用Django提供的contenttypes框架,而不要将Tags定义为ManyToMany字段。
文档中的示例正是您想要的。
https://docs.djangoproject.com/en/1.8/ref/contrib/contenttypes/#generic-relations
https://docs.djangoproject.com/en/1.8/ref/contrib/contenttypes/#reverse-generic-relations
为什么for循环不是一种选择?它看起来像你可以简单地做15计数查询。你的数据库是什么? – freakish
我的数据库是Postgres。我有聚合,但我认为不符合我的需要。因为我的网站已经有很多条目,并且为了现在和未来做很多查询都很糟糕。我尝试了forloop,但它是减速的方式。 – sebb
@SebastianBurzyński那么,你在逻辑上对多个表进行多个计数查询。我没有看到真正的优化空间(即恕我直言,任何查询将有类似的执行时间),除了适当的索引(但我认为你已经这样做了)。除非数据不一定是实时的。然后,您可以定期对其进行聚合并将其存储在单独的表中(例如,如果您使用的是PostgreSQL版本,则为物化视图)。 – freakish