2013-09-03 4 views
2

Я начинаю с Django, и у меня есть то, что я считаю простым вопросом. Как я могу получить результат следующего запроса с QuerySet?Простое внутреннее соединение с django

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() 

но оба из них, как мне кажется очень сложным. Это простой способ сделать это?

Большое спасибо.

+0

На самом деле, ваш второй вариант - это то, что я хотел бы использовать для 'Poll.objects.filter (choice__isnull = False) .distinct()' – karthikr

+0

Спасибо большое, я думаю, что это намного красивее – ellgon

ответ

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

p.choice_set.all() 
+0

Этот код приносит мне все варианты опрос, не все опросы с выбором. Спасибо в любом случае :) – ellgon

0

С Django 1.4, вы можете использовать prefetch_related (docs):

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() 

Джанго составят в общей сложности 2 запросов: один для опроса и один для выбора.

Смежные вопросы