问题描述
我正在使用Django 2.2
我有两个具有多对多关系的表
class Book(models.Model):
title = models.CharField(max_length=50)
authors = models.ManyToManyField(Author)
class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
author_names = ['john','parker','donald']
解决方法
一种方法是使用:
from django.db.models import Count
Author.objects.values('first_name').annotate(count_books=Count('book'))
,它将返回按Author
的名字分组的查询集。在此查询集的结果中,您还可以查看基于每个Author
的first_name(例如<QuerySet [{'first_name': 'john','count_books': 1},{'first_name': 'parker','count_books': 3}]>
)的图书数量,如果您要过滤此查询集,可以将其更改为:
Author.objects.filter(first_name__in=author_names).values('first_name').annotate(count_books=Count('book'))
但是,如果您想查看与每个Author
对象相关的图书数量,则可以执行以下操作:
from django.db.models import Count
Author.objects.values('id').annotate(count_books=Count('book'))