2012-04-02 45 views
0

举一个简单的Django模型:分组模式由场在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'}

它们应该呈现这样在输出:

  • 一个= 1
    • B = 5
    • B = 8
  • a = 2,b = 4

基本上,我需要按照它们的a字段对对象进行分组,并呈现与具有唯一a字段的对象不同的对象。

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

回答

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> 
+0

我有一种感觉,你将是第一个响应;)只是不知道它会那么快。谢谢! – 2012-04-02 15:15:48

+0

丹尼尔,任何想法如何我可以检查石斑鱼,使那些与单个元素将呈现不同? – 2012-04-02 15:27:44

+0

我已更新您的示例以显示您可能如何做到这一点。 – 2012-04-02 16:23:21