Группировка затем сортировка в шаблоне Django - PullRequest
1 голос
/ 29 марта 2012

У меня есть этот код в моих views.py:

array = []
p = Person.objects.filter(client=1,status='Complete').values('name', 'age', 'category').order_by('category')
for x in p:
 d = {'Name': x['name'], 'Age': x['age'], 'Category':x['category']}
 array.append(d)

тогда я получил это:

[{'Name': u'Mike', 'Age': 20, 'Category':'A'},
{'Name': u'Bell', 'Age': 30, 'Category':'A'},
{'Name': u'Ned', 'Age': 23, 'Category':'B'},
{'Name': u'Ben', 'Age': 21, 'Category':'B'},
{'Name': u'Tom', 'Age': 28, 'Category':'B'},]

в моем шаблоне:

{% if persons %}
 {% for p in persons %}
   Category {{p.Category}} :<br>{{p.Name}} <br> {{p.Age}}
 {% endfor %}
{% endif %}

Я действительно хочу, чтобы меня обгоняли, вот так:

Category A:
Mike 20
Bell 30

Category B:
Ned 23
Ben 21
Tom 28

Кто-нибудь имеет представление о моем случае? заранее спасибо ...

1 Ответ

2 голосов
/ 29 марта 2012

Вы можете использовать тег шаблона regroup

{% if persons %}
    {% regroup persons by "Category" as people_list %}
    {% for key, val in people_list.items %}
        {{ key|title }} : <br /> {{ val|title }}
    {% endfor %}
{% endif %}

Обратите внимание, что values:

Возвращает ValuesQuerySet - подкласс QuerySet, который возвращает словари при использовании в качестве итерируемых, а не объектов экземпляра модели.

так что вы можете удалить это:

for x in p:
    d = {'Name': x['name'], 'Age': x['age'], 'Category':x['category']}
    array.append(d)

и измените группу на:

{% regroup persons by category as people_list %}
...