首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django按首字母分组查询?

问Django按首字母分组查询?
EN

Stack Overflow用户
提问于 2010-11-11 05:35:13
回答 6查看 5.7K关注 0票数 13

我有一个QuerySet,类似于:

代码语言:javascript
复制
items = Item.objects.all()

项目有一个“名称”字段。在模板中,我要显示:

  • A
  • Axes
  • Alcohol
  • B
  • Bazookas
  • C
  • Coins
  • Cartridges
  • S
  • Swords
  • Sparrows

因此,这些物品是按第一个字母排序和分组的。漏掉的字母被省略了。有人有什么想法吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-11-11 05:57:10

这里有一个模板标记,如果您只关心它在页面上的表示。首先,在类中定义一个组织原则。在你的例子中,这是第一个字母:

代码语言:javascript
复制
class Item(models.Model):
    ...

    def first_letter(self):
        return self.name and self.name[0] or ''

然后使用first_letter调用在模板中定义一个重新组:

代码语言:javascript
复制
{% regroup items by first_letter as letter_list %}
<ul> 
{% for letter in letter_list %}
  <li>{{ letter.grouper }}
    <ul>
        {% for item in letter.list %}
        <li>{{ item.name }}</li>
        {% endfor %}
    </ul>
  </li>
{% endfor %}
</ul>
票数 21
EN

Stack Overflow用户

发布于 2012-11-26 17:29:10

只是想补充一下,如果你使用这个,你的项目有一个小写的第一个字符,它将是一个单独的组。我在上面加了一个。

代码语言:javascript
复制
return self.name and self.name.upper()[0] or ''
票数 7
EN

Stack Overflow用户

发布于 2014-05-25 15:35:57

或者,您可以在模板中使用slice内联,而无需在模型上使用first_letter方法。

代码语言:javascript
复制
{% regroup items by name|slice:":1" as letter_list %}
<ul> 
{% for letter in letter_list %}
  <li>{{ letter.grouper }}
    <ul>
        {% for item in letter.list %}
        <li>{{ item.name }}</li>
        {% endfor %}
    </ul>
  </li>
{% endfor %}
</ul>
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4151631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档