Django:获取具有一组已定义的相关对象的所有对象



假设我们有如下的许多关系:

from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=100) 
authors = models.ManyToManyField(Author, related_name="books")

现在我有了一组已知的作者:

authors = Author.objects.filter(...)

我如何才能获得所有由这一组作者撰写的书?

books = Book.objects.filter(X)

什么是X?以至于我所有的书都是由那一组作者写的?

我试过了,只是因为:

books = Book.objects.filter(authors__in=authors)

但不,这似乎又回到了这些作者中任何一位都贡献过的书。我想要所有这些作者都贡献过的书,而且只有那些作者。

到目前为止,这一直困扰着我

您可以检查匹配作者的数量是否为作者数量,因此:

from django.db.models import Count, Q
nauthors = authors.count()
Book.objects.alias(
nauthors=Count('authors'),
nmatch_authors=Count('authors',filter=Q(authors__in=authors)),
).filter(
nauthors=nauthors,
nmatched_authors=nauthors
)

重要的是authors不包含重复项。

相关内容

最新更新