【问题标题】:How to create an Django ordered list如何创建 Django 有序列表
【发布时间】:2020-05-20 18:49:14
【问题描述】:

我有以下型号:

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 对象后,是否有一种简单的方法来显示它?

【问题讨论】:

  • 我在您想要的输出中没有看到任何“特定排序逻辑”。我错过了什么吗?

标签: django django-models django-templates django-views django-queryset


【解决方案1】:

您可以使用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 来获得你想要的布局。

【讨论】:

  • 我不断收到错误。 Instruments_by_category[instrument["category"]].append(instrument["name"])
  • 我得到以下输出: defaultdict(, {'instrument__category': ['instrument__name', 'instrument__name', 'instrument__name', 'instrument__name', 'instrument__name', '仪器__名称','仪器__名称','仪器__名称','仪器__名称','仪器__名称','仪器__名称','仪器__名称','仪器__名称','仪器__名称','仪器__名称','仪器__名称']})
  • Instrument.objects.all().values('name', 'category') 的输出是什么?
猜你喜欢
  • 2013-04-18
  • 1970-01-01
  • 2010-09-15
  • 2011-07-10
  • 2019-10-20
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 1970-01-01
相关资源
最近更新 更多