Django queryset和select_related()

时间:2012-10-19 12:31:20

标签: django django-queryset

我对django querysets和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()的文档,但我不知道该怎么办,因为我要启动我的查询群组原因,它直接链接到登录用户。

2 个答案:

答案 0 :(得分: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 %}

答案 1 :(得分:0)

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