2012-02-10 85 views
0

如果我有代码如下:Django的ListView控件使用反向外键查找

Person 

Email 
    FK(Person) 

Phone 
    FK(Person) 

Address 
    FK(Person) 

而且我想,以显示与每个人,电话号码,电子邮件和地址为他们每个人一个ListView,所有的() 0]是否足够好,我将如何创建一个QuerySet传递给ListView?

谢谢

回答

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来获得相关型号。但要访问它们,您需要其他查询(更多数据库命中)。