我的(简化)模型是这样的:
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个查询集然后将它们加入列表中可能会更有效率,但是希望将它们集中在一个中。
任何线索? THX!
答案 0 :(得分:2)
要检查M2M关系,您只需执行=
,而不是contains
:
Story.objects.filter(writers=request.user)
您可以使用Q
个对象进行or
查询:
Story.objects.filter(Q(wikiedit=True) | Q(writers=request.user))