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 对象的主要内容,如果未能解决你的问题,请参考以下文章