如何解决在单个 Django 页面上将对象分组而不是排序到按字母顺序排列的列表中
我正在尝试在目录页面的字母列表中显示对象列表。看起来像这样的东西:
https://en.wikipedia.org/wiki/List_of_film_and_television_directors
为了避免点击链接,列表将是:
姓氏以A开头
• 韦斯安德森
姓氏以B开头
• 伯顿,蒂姆
姓氏以C开头
• 科波拉,索非亚
模型的简化版本是:
class Person(model.Models):
first_name = model.CharField
last_name = model.CharField
def __str__(self):
return "{},{}".format(self.last_name,self.first_name)
路线 1。在视图中?
如果不是在模板中过滤,之后我认为可以过滤视图中的对象并分别发送每个部分。
def person_list(request):
startswith_a = Person.objects.filter(last_name__startswith="a")
startswith_b = Person.objects.filter(last_name__startswith="b")
startswith_c = Person.objects.filter(last_name__startswith="c")
etc.
etc.
return render(request,"directory/person-list.html",{"startswith_a": startswith_a,"startswith_b": startswith_b})
但这感觉不对,因为我必须将字母表硬编码到视图定义中,然后将所有 26 个(或更多)集合传递到视图中。
路线 2。在模型中?
最后,我认为模型中可能有一个新字段,可以将其在目录中的位置固定。这可以手动更新,或者(我猜?)通过自定义模型上的保存功能以根据 last_name 字段的第一个字符自动分配。
class Person(model.Models):
directory_position = model.CharField # eg. "a"
first_name = model.CharField # eg. "Wes"
last_name = model.CharField # eg. "Anderson"
def __str__(self):
return "{},self.first_name)
有了这个集合,就可以使用模板标签来显示页面每个部分的相关对象。
{{ person.directory_position="a" }}
但这仍然感觉有点麻烦,因为模板必须为 26 个字符中的每一个(对于特殊字符还需要更多)遍历整个返回的列表。
再一次,我觉得我一定遗漏了一些明显的东西。可能有一行代码可以完成所有这些(尤其是在 Python 中!)但我就是想不通。
提前致谢!!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。