Django ORM按作者和书籍数量进行多对多筛选
我正在使用Django 2.2 我有两个多对多关系的表Django ORM按作者和书籍数量进行多对多筛选,django,django-models,many-to-many,django-orm,Django,Django Models,Many To Many,Django Orm,我正在使用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.CharFi
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)
我有一份作者名单first\u name
author_names = ['john', 'parker', 'donald']
如何计算每位作者拥有的图书数量?一种方法是使用:
from django.db.models import Count
Author.objects.values('first_name').annotate(count_books=Count('book'))
它将返回一个按作者的名字分组的查询集。在此查询集的结果中,您还可以看到基于每个作者的名字(如
)的图书数量,如果您想筛选此查询集,可以将其更改为:
Author.objects.filter(first_name__in=author_names).values('first_name').annotate(count_books=Count('book'))
但是,如果您想查看每个作者
对象相关的图书数量,可以执行以下操作:
from django.db.models import Count
Author.objects.values('id').annotate(count_books=Count('book'))
谢谢Rohan。如果一本书有两位作者呢。这本书对两位作者都算吗?不客气,答案是肯定的,即使一本书有不止一位作者,它也会对每个用户算。