データベースから「A OR B」っていう条件で絞り込んでデータを取得するのって、Django ではどうやるんだろう。「A AND B」なら filter や exclude でいいんだけど…。
困ったときは Django の公式ドキュメントを見るべし!ってことで調べてみたら、ちゃんと書いてありました。
Q オブジェクトを使えばいいのね。
例えば「user1 または user2 の投稿を取得する」だと、Q オブジェクトを使って
posts = Post.object.filter(Q(author=user1) | Q(author=user2))
と書けます。
OR と AND を組み合わせた、「user1 または user2 の投稿で下書きじゃないものを取得する」の場合
posts = Post.object.filter(Q(author=user1) | Q(author=user2), Q(is_draft=False))
で OK。
filter や exclude といった QuerySet のメソッドと、Q オブジェクトを使えば、たいてい事足りそうです。ホント、Django の Model API って強力だ。