在Django中,如果我们想按照某个字段分组统计数量,可以使用annotate和Count方法。如果我们想去除重复值,可以通过在Count方法中使用distinct参数来实现。
以下是一个示例,假设我们有一个Book模型,其中有一个字段为category:
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
category = models.CharField(max_length=50)
我们现在想统计每个类别有多少本书,同时去除重复值。这可以通过以下查询来实现:
from django.db.models import Count
books = Book.objects.annotate(num_books=Count('title', distinct=True)).values('category', 'num_books')
在这个查询中,我们使用annotate方法创建一个新的num_books字段,用Count方法统计每个类别有多少本书,并使用distinct参数去除重复值。最后,我们使用values方法获取category和num_books字段的值。
这将返回一个QuerySet,其中包含一个字典列表,每个字典表示一个类别和它的书籍数量: