2012-10-19 342 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

是可以優化或改變我的模型。 如果我不能查詢它,它可能是一個模型問題,而不是查詢集問題:)