在Django中按字段对模型进行分组

时间:2012-04-02 15:07:24

标签: django django-models django-views

考虑一个简单的Django模型:

class MyModel(models.Model):
    a = models.CharField()
    b = models.CharField()

一个在视图中获取它们的查询:

objs = MyModel.objects.all()

现在这里是棘手的部分,模板应该渲染具有相同a字段的对象。所以,如果我有三个对象:

{a:'1', b:'5'}, {a:'1', b:'8'}, {a:'2', b:'4'}

他们应该在输出中这样渲染:

  • a = 1时
    • B = 5
    • B = 8
  • a = 2,b = 4

基本上,我需要按a字段对对象进行分组,并以不同于具有唯一a字段的对象的方式呈现这些组。

我应该如何分组这些对象并以不同方式显示它们?

1 个答案:

答案 0 :(得分:2)

a字段对其进行排序,然后使用regroup标记对模板进行分组。

代码示例:

{% regroup objs by a as objs_list %}
<ul>
  {% for a in objs_list %}
    {% if a.list|length == 1 %}
    <li>{{ a.grouper }}, {{ a.list.0.b }}</li>
    {% else %}
    <li>{{ a.grouper }}
      <ul>
      {% for obj in a.list %}
        <li>{{ obj.b }}</li>
      {% endfor %}
      </ul>
     {% endif %}
   </li>
   {% endfor %}      
</ul>