【问题标题】:Simple inner join with django使用 django 进行简单的内部连接
【发布时间】:2013-09-06 19:39:33
【问题描述】:

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

但在我看来,它们都非常复杂。有没有简单的方法可以做到这一点?

非常感谢。

【问题讨论】:

  • 其实,你的第二个选择就是我想要的Poll.objects.filter(choice__isnull = False).distinct()
  • 非常感谢,我也觉得它更漂亮了

标签: python sql django django-models


【解决方案1】:
p = Poll.objects.get(pk=poll_id)

p.choice_set.all()

【讨论】:

  • 这段代码给我带来了投票的所有选择,而不是所有有选择的投票。无论如何谢谢:)
【解决方案2】:

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

Django 总共会进行 2 个查询:一个用于投票,一个用于选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 2014-05-31
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多