django是组合2个查询还是生成复合查询的有效方法?

django是组合2个查询还是生成复合查询的有效方法?,django,django-queryset,django-orm,Django,Django Queryset,Django Orm,我的(简化)模型如下所示: 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) 现在,我正在尝试构建一个queryset,其中包含满足以

我的(简化)模型如下所示:

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)
现在,我正在尝试构建一个queryset,其中包含满足以下条件的所有故事:
wikiedit=True或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
也许制作两个查询集,然后将它们加入一个列表更有效,但我很想把它放在一个列表中


有什么线索吗?谢谢

要检查M2M关系,只需执行
=
,而不是
包含

Story.objects.filter(writers=request.user)
您可以使用
Q
对象执行
查询:

Story.objects.filter(Q(wikiedit=True) | Q(writers=request.user))

伟大的它的工作,可能是一个太基本的问题,但我没有设法找到这几个小时的信息!请进一步读者注意,这可能包括重复的结果,它们可能被排除在外:
Story.objects.filter(qwriters |(qwiki&~qwriters))
其中qwriters和qwiki是对应的Q对象。谢谢