Как создать упорядоченный список Django - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть следующая модель:

class Instrument(MPTTModel):
    name = models.CharField(max_length=100, null=True, blank=True)
    category = models.CharField(max_length=100, null=True, blank=True)

Таблица выглядит следующим образом:

name   | category |
---------------------
violin | string   |
viola  | string   |
flute  | woodwind |
oboe   | woodwind |
trumpet| brass    |

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

   String: 
     Violin
     Viola
   Woodwind:
     flute
     oboe
   Brass:
     trumpet

Существует ли простой способ отобразить это после запроса объекта Instrument?

1 Ответ

0 голосов
/ 05 февраля 2020

Вы можете использовать defaultdict для накопления списка названий инструментов для каждой категории.

На ваш взгляд:

from collections import defaultdict
instruments_by_category = defaultdict(list)

for instrument in Instrument.objects.all().values('name', 'category'):
    instruments_by_category[instrument["category"]].append(instrument["name"])

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

{% for category, names in instruments_by_category.items %}
  {{ category }}:
  {% for name in names %}
    {{ name }}
  {% endfor %}
{% endfor %}

Вы можете найти HTML, чтобы получить нужный макет.

...