Django重新组合了游标结果

时间:2012-05-21 16:08:07

标签: django django-templates cursor

使用Django,我有一个相当复杂的SQL查询工作正常并返回我想要的结果,所以我不想尝试使用Django的模型查询表示法重现它。

我将结果传递给我的模板,并能够使用以下符号显示它们:

{% for line in myresults %}
...
{{ line.0 }}
...
{{ line.1 }}
etc.
{% endfor %}

有没有办法在此结果集上使用regroup标记?

如果我尝试:

{% regroup myresults by myresults.0 as mylist %}
{% for item in mylist %}
{{ item.grouper }}
{% for line in item.list %}
...
{{ line.0 }}
{{ line.1 }}
etc.

我像以前一样获得所有结果(没有重新组合)但是没有得到item.grouper(我看到的只是“无”作为一个单独的组而不是我的多个组)

这是一个语法问题还是我尝试的东西不适合重组的功能?

我已经以正常的方式使用重新组合对象列表,但上面让我难过。

有什么建议吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

{% regroup myresults by myresults.0 as mylist %}您按照列表myresults中的第一项进行分组,您必须按项目的某个字段进行分组。

here的下一个例子:

cities = [
    {'name': 'Mumbai', 'population': '19,000,000', 'country': 'India'},
    {'name': 'Calcutta', 'population': '15,000,000', 'country': 'India'},
    {'name': 'New York', 'population': '20,000,000', 'country': 'USA'},
    {'name': 'Chicago', 'population': '7,000,000', 'country': 'USA'},
    {'name': 'Tokyo', 'population': '33,000,000', 'country': 'Japan'},
]

...并且您希望显示按国家/地区排序的分层列表,如下所示:

India
    Mumbai: 19,000,000
    Calcutta: 15,000,000
USA
    New York: 20,000,000
    Chicago: 7,000,000
Japan
    Tokyo: 33,000,000

您可以使用{% regroup %}标记按国家/地区对城市列表进行分组。以下模板代码片段可以实现此目的:

{% regroup cities by country as country_list %}

<ul>
{% for country in country_list %}
    <li>{{ country.grouper }}
    <ul>
        {% for item in country.list %}
          <li>{{ item.name }}: {{ item.population }}</li>
        {% endfor %}
    </ul>
    </li>
{% endfor %}
</ul>