2012-10-19 138 views
0

我有一个关于django querysets和select_related的小问题。Django queryset和select_related()

在这种模式下:

class DeviceGroup(models.Model): 
    name = models.CharField(max_length=255, unique=True) 
    owner = models.ForeignKey(User) 

class Device(models.Model): 
    name = models.CharField(max_length=255) 
    address = models.GenericIPAddressField() 
    port = models.IntegerField() 
    group = models.ForeignKey(DeviceGroup) 

class Sensor(models.Model): 
    device = models.ForeignKey(Device) 

我希望得到这样的列表:

- group 1 
    - device 1 
    - device 2 
    - device 3 
    -sensor 1 
- group 2 
- group 3 
    - device 4 
    - device 5 
    - sensor 2 

我读过有关select_related()的文档,但我不知道如何要做,因为我必须启动我的查询bu组原因,它直接链接到记录的用户。

回答

1

如果你想这样的方式来呈现它在Django模板,你可能想使用regrouphttps://docs.djangoproject.com/en/dev/ref/templates/builtins/#regroup

新的文档稍微模糊,我找老文档版本容易理解(此如从https://docs.djangoproject.com/en/1.3/ref/templates/builtins/#regroup):

{% regroup people by gender as gender_list %} 

<ul> 
{% for gender in gender_list %} 
    <li>{{ gender.grouper }} 
    <ul> 
     {% for item in gender.list %} 
     <li>{{ item.first_name }} {{ item.last_name }}</li> 
     {% endfor %} 
    </ul> 
    </li> 
{% endfor %} 
</ul> 

在哪里,你的情况:

从view.py

group = Group.objects.all() 

template.html

{% regroup groups by device as device_list %} 
+0

我想,gorjuce希望通过一个查询选择与某个用户相关的传感器对象,而不是所有对象。 –

+0

thnks为答案,但这将是一个模型问题,我猜。我是一名PHP开发人员,这是无聊的原因,我知道这是简单的加入! – billyJoe

0

是可以优化或改变我的模型。 如果我不能查询它,它可能是一个模型问题,而不是查询集问题:)