1

私の(簡略化された)モデルは次のようなものです:

class Story(models.Model):
    wikiedit = models.BooleanField(default=False)
    writers = models.ManyToManyField(User,null=True,blank=True)
class Writer(models.Model):
    user = models.OneToOneField(User)

今、私は満たすすべてのストーリーを含むクエリセットを構築しようとしています:wikiedit = True or user in writers

したがって、ビュー内で次の 2 つのクエリを作成します。

wikistories = Story.objects.filter(wikiedit=True)
writerstories = request.user.objects.story_set.filter

しかし、可能であれば、これを 1 つのデータベース ヒットだけで作成したいと考えています。そのほうが効率がいいと思います。in 演算子がこの m2m 関係で次の意味でサポートされているかどうかはわかりません。

 Story.objects.filter(writers__contains=request.user) #but this is a TypeError

2 つのクエリセットを作成してリストに結合する方が効率的かもしれませんが、1 つにまとめたいと考えています。

手がかりはありますか?どうも!

4

1 に答える 1

2

M2M 関係を確認するには、次のことを行う=のではなく、次のことを行いますcontains

Story.objects.filter(writers=request.user)

また、Qオブジェクトを使用してorクエリを実行できます。

Story.objects.filter(Q(wikiedit=True) | Q(writers=request.user))
于 2013-05-16T08:21:00.840 に答える