简单的内部连接与django

时间:2013-09-03 14:11:00

标签: python sql django django-models

我从Django开始,我认为这是一个简单的问题。如何使用QuerySet获取下一个查询的结果?

select * 
from poll p,
     choice c 
where p.id = c.poll_id

我找到了两种方法:

Poll.objects.filter(id__in = Choice.objects.values_list('poll_id'))

Poll.objects.filter(choice__id__isnull = False).distinct()

但他们两个在我看来都非常复杂。是否有一种简单的方法可以做到这一点?

非常感谢。

2 个答案:

答案 0 :(得分:0)

p = Poll.objects.get(pk=poll_id)

p.choice_set.all()

答案 1 :(得分:0)

从Django 1.4开始,您可以使用prefetch_relateddocs):

all_polls = Poll.objects.all().prefetch_related('choice_set')
for poll in all_polls:
    # This will list all choices of this poll
    choices = poll.choice_set.all()

Django将总共进行2次查询:一次用于民意调查,一次用于选择。