私はそのような Book モデルを持っています:
class Book(models.Model):
authors = models.ManyToManyField(Author, ...)
...
要するに:
著者が特定の著者のセットと厳密に等しい本を取得したいと思います。それを行う単一のクエリがあるかどうかはわかりませんが、提案は役に立ちます。
長文:
これが私が試したものです(AttributeErrorの取得に失敗しました)
# A sample set of authors
target_authors = set((author_1, author_2))
# To reduce the search space,
# first retrieve those books with just 2 authors.
candidate_books = Book.objects.annotate(c=Count('authors')).filter(c=len(target_authors))
final_books = QuerySet()
for author in target_authors:
temp_books = candidate_books.filter(authors__in=[author])
final_books = final_books and temp_books
...そしてここに私が得たものがあります:
AttributeError: 'NoneType' object has no attribute '_meta'
一般に、私の場合のように、ManyToMany フィールドに特定のオブジェクトのセットが含まれているという制約があるモデルをどのようにクエリすればよいでしょうか?
ps: 関連する SO の質問をいくつか見つけましたが、明確な回答が得られませんでした。適切なポインタも役立ちます。ありがとう。