私がジェームズとユージーンの著者であることを考えると。組み込みの__in
QuerySetを使用すると、JamesまたはEugeneのいずれかに一致するm2mフィールドがフィルタリングされます。しかし、それらだけが両方に一致するようにしたい場合はどうすればよいでしょうか。
セットアップ例:
authors = Author.objects.filter(interests__in=['python','ruby'])
# [<Author: James>, <Author: Eugene>]
これが私が通常の状態に対して行ったクエリです。JamesまたはEugene、あるいはその両方を含むすべての本が返されます。
books = Book.objects.filter(authors__in=authors)
# [<Book: Book by James, Jack>, <Book: Book by Eugene>]
しかし、現時点では、ジェームズとユージーンの両方によって書かれた本を見つけたい場合は、ループを実行する必要があります。
books = Book.objects
for author in authors:
books = books.filter(authors=author)
# books [<Book: Book by James, Eugene>]
指定された値の両方に直接一致するm2mフィールドでフィルターを実行するエレガントな方法はありますか。おそらく次のようなもの
books = Book.objects.filter(authors__match=authors)