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

所以在我看来,我提出了两个问题:

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

但如果可能的话,我想只用一个数据库命中来完成它。我想这会更有效率。从某种意义上说,我无法找到这种 m2m 关系是否支持 in 运算符:

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

制作 2 个查询集然后将它们加入一个列表可能会更有效,但我希望将它放在一个列表中。

有什么线索吗?谢谢!

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 回答