Django ListView使用反向外键查找

时间:2012-02-10 18:39:50

标签: python django

如果我的代码如下:

Person

Email
  FK(Person)

Phone
  FK(Person)

Address
  FK(Person)

我想要显示每个人的ListView以及每个人的电话号码,电子邮件和地址,all()[0]已经足够好了,我将如何创建一个QuerySet传递到ListView?< / p>

由于

1 个答案:

答案 0 :(得分:0)

这些关系是一对一还是一对多?如果一对一,您可以使用Django的aggregation功能在单个查询中获取所有引用。 (编辑:抱歉,不是引用,只是他们的pks)例如:

from django.db.models import Min
Person.objects.all().annotate(email=Min('email'), phone=Min('phone'), address=Min('address'))

我不知道它是否能与ListView很好地集成,但是......在这种情况下使用OneToOneField可能会起作用(即使没有聚合),我也不确定。

如果关系是一对多关系,我恐怕你无法在一个查询中做到这一点。您可能已经知道,给定Person对象,您可以使用_set后缀获取相关模型:email_setphone_setaddress_set。但要访问它们,您需要其他查询(更多数据库命中)。