计算每个对象在另一个 table 中的使用次数
count the number of uses of each of the objects in another table
我有两个模型:
class FirstTable(models.Model):
name = models.CharField(...)
class SecondTable(models.Model):
examples = models.ManyToManyField(FirstTable)
我有一个函数可以计算在 SecondTable 的示例字段中使用了多少次 FirstTable
:
data = {}
for i in FirstTable.objects.all():
data[i.name] = SecondTable.objects.filter(examples__exact=i).count()
但是是否可以通过一次请求获得相同的数据? (聚合或注释方式)
你可以这样做:
from django.db.models import Count
FirstTable.objects.annotate(examples_count=Count('secondtable')).values('name', 'examples_count')
输出将是:
<QuerySet [{'name': 'Name1', 'examples_count': 3}, {'name': 'Name2', 'examples_count': 10}, ..., >
我有两个模型:
class FirstTable(models.Model):
name = models.CharField(...)
class SecondTable(models.Model):
examples = models.ManyToManyField(FirstTable)
我有一个函数可以计算在 SecondTable 的示例字段中使用了多少次 FirstTable
:
data = {}
for i in FirstTable.objects.all():
data[i.name] = SecondTable.objects.filter(examples__exact=i).count()
但是是否可以通过一次请求获得相同的数据? (聚合或注释方式)
你可以这样做:
from django.db.models import Count
FirstTable.objects.annotate(examples_count=Count('secondtable')).values('name', 'examples_count')
输出将是:
<QuerySet [{'name': 'Name1', 'examples_count': 3}, {'name': 'Name2', 'examples_count': 10}, ..., >