Django 计数嵌套的 ManyToManyField 对象

Posted

技术标签:

【中文标题】Django 计数嵌套的 ManyToManyField 对象【英文标题】:Django count nested ManyToManyField Objects 【发布时间】:2020-04-22 12:31:45 【问题描述】:

我有以下模型,它有 3 个类 Project,CrawlerProject,CrawlerResults

class CrawlerProject(models.Model):
    user = models.ForeignKey(User,on_delete=models.SET_NULL,null=True)
    cralwer_results_M2M = models.ManyToManyField(CrawlerResults,blank=True)
class Project(models.Model):
    user = models.ForeignKey(User,on_delete=models.SET_NULL,null=True)
    crawler_project_M2M = models.ManyToManyField(CrawlerProject,blank=True)

在这里,我想计算单个Project 对象中所有CrawlerProjects 存在的CrawlerResults 对象的总数。

projects = Project.objects.all().prefetch_related('crawler_project_M2M')
for each_proj in projects:
   total_num_of_crawler_results = each_proj.crawler_project_M2M__cralwer_results_M2M.count() ## count all the crawler_results objects of all crawler_project present in current `project` object.

我如何以一种有效的方式(单个查询)来获得嵌套的 ManyToMany 类的总数?

【问题讨论】:

【参考方案1】:

试试这个:

from django.db.models import Count
CrawlerProjects =CrawlerProject.objects.all().annotate(CrawlerResults_count=Count('project'))

【讨论】:

我还在想办法在prefetch方法中添加上述注释,因为prefetch字段是M2M,如果你知道如何添加,请告诉我

以上是关于Django 计数嵌套的 ManyToManyField 对象的主要内容,如果未能解决你的问题,请参考以下文章

django 过滤当前用户进行投票

django model 插入数据方法

Django模板:获取嵌套循环的总迭代次数

如何在 django rest 框架中的嵌套序列化器相关对象上使用 prefetch_related?

用于计数的嵌套计数查询的 SQL 语法问题?

Angular2中嵌套ngFor循环的计数器