django有效的方法来组合2个查询或复合一个?

时间:2013-05-16 08:14:37

标签: 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)

现在我正在尝试构建一个包含所有符合的故事的查询集: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!

1 个答案:

答案 0 :(得分:2)

要检查M2M关系,您只需执行=,而不是contains

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

您可以使用Q个对象进行or查询:

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