Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django ORM按作者和书籍数量进行多对多筛选_Django_Django Models_Many To Many_Django Orm - Fatal编程技术网

Django ORM按作者和书籍数量进行多对多筛选

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

我正在使用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)
我有一份作者名单
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。如果一本书有两位作者呢。这本书对两位作者都算吗?不客气,答案是肯定的,即使一本书有不止一位作者,它也会对每个用户算。