Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django统计一个模型在许多其他模型中发生的所有事件_Python_Django_Manytomanyfield - Fatal编程技术网

Python Django统计一个模型在许多其他模型中发生的所有事件

Python Django统计一个模型在许多其他模型中发生的所有事件,python,django,manytomanyfield,Python,Django,Manytomanyfield,我使用的是django,我有模型名标签 它用于15种不同型号的accros,我的整个应用程序为ManyToManyField 我需要获取特定标签的所有事件的len/计数 我该怎么做呢?我必须使用聚合/注释吗?选择相关的?或者完全不同的东西。当然,使用forloops并不是一种观点。如果您希望能够在一个请求中查询有多少项与标记相关(如果它们是不同的Django模型),那么您应该使用Django提供的contenttypes框架,而不是将标记定义为多个字段 文档中的示例正是您想要的 如果您希望能够

我使用的是django,我有模型名
标签

它用于15种不同型号的accros,我的整个应用程序为ManyToManyField

我需要获取特定标签的所有事件的
len
/
计数


我该怎么做呢?我必须使用聚合/注释吗?选择相关的?或者完全不同的东西。当然,使用forloops并不是一种观点。

如果您希望能够在一个请求中查询有多少项与标记相关(如果它们是不同的Django模型),那么您应该使用Django提供的contenttypes框架,而不是将标记定义为多个字段

文档中的示例正是您想要的


如果您希望能够在一个请求中查询有多少项与不同Django模型的标记相关,则应使用Django提供的contenttypes框架,而不是将标记定义为多个字段

文档中的示例正是您想要的


为什么不选择for循环?在我看来,你可以简单地进行15次计数查询。你的数据库是什么?我的数据库是Postgres。我已经三年了,但我认为这不符合我的需要。因为我的网站已经有很多条目了,而且无论是现在还是将来,做很多查询都是不好的。我尝试了forloop,但这是一种减慢速度的方法。@SebastianBurzyński嗯,您在逻辑上对多个表执行多个计数查询。除了适当的索引之外,我看不到真正的优化空间(即任何查询都有类似的执行时间)(但我假设您已经这样做了)。除非数据不必是实时的。然后你可以定期聚合它并将其存储在一个单独的表中(例如,如果你使用的是PostgreSQL版本的东西,则为物化视图)。@奇怪的是,我在想,我可以写一个芹菜任务,每天晚上检查一次发生的情况。但这真的是一个好办法吗?我想这比每天都打DB要好request@SebastianBurzy是的,这是一个正确的方法。如果您真的有这么多数据,那么您应该这样做。为什么for循环不是一个选项?在我看来,你可以简单地进行15次计数查询。你的数据库是什么?我的数据库是Postgres。我已经三年了,但我认为这不符合我的需要。因为我的网站已经有很多条目了,而且无论是现在还是将来,做很多查询都是不好的。我尝试了forloop,但这是一种减慢速度的方法。@SebastianBurzyński嗯,您在逻辑上对多个表执行多个计数查询。除了适当的索引之外,我看不到真正的优化空间(即任何查询都有类似的执行时间)(但我假设您已经这样做了)。除非数据不必是实时的。然后你可以定期聚合它并将其存储在一个单独的表中(例如,如果你使用的是PostgreSQL版本的东西,则为物化视图)。@奇怪的是,我在想,我可以写一个芹菜任务,每天晚上检查一次发生的情况。但这真的是一个好办法吗?我想这比每天都打DB要好request@SebastianBurzy是的,这是一个正确的方法。如果你真的有这么多的数据,那么你应该这样做。