如何解决Django:进行字母分页时将所有数字数据连接到一个QuerySet中的最简单方法是?
我正在尝试将查询结果按字母顺序排列,如下所示:
这适用于以下代码:
def get_context(self,request):
# Get published shows,ordered alphabetically
context = super().get_context(request)
shows = ShowPage.objects.child_of(self).live().order_by("name")
context["pages"] = [{"letter" : i,"shows" : shows.filter(name__istartswith=i.upper())}
for i in "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"]
return context
下一步是将以任意数字开头的所有节目组合为一个标记为“ 0-9”的组。
以下内容可以满足我的要求,但是它非常冗长,我想知道是否有一种我不知道的更简单的方法:
def get_context(self,ordered alphabetically
context = super().get_context(request)
shows = ShowPage.objects.child_of(self).live().order_by("name")
pages = [{"letter" : i,"shows" : shows.filter(name__istartswith=i.upper())}
for i in "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"]
digits = {"letter" : "0 - 9","shows" : []}
for index,alphabet in enumerate(pages):
if alphabet["letter"].isdigit():
for show in alphabet["shows"]:
digits["shows"] += [show]
while pages[0]["letter"].isdigit():
print(pages[0])
pages.pop(0)
pages.insert(0,digits)
context["pages"] = pages
return context
有什么想法吗?
解决方法
在字段搜索中只需一行简单的正则表达式即可查看名称字符串是否以数字开头。另外,istartswith
不区分大小写,因此您不需要i.upper()
。
def get_context(self,request):
# Get published shows,ordered alphabetically
context = super().get_context(request)
shows = ShowPage.objects.child_of(self).live().order_by("name")
context['pages'] = [{'letter': shows.filter(name__istartswith=letter)} for letter in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ']
context['pages'].append({'letter': '0-9','shows': shows.filter(name__regex=r'^\d[\w\d _-]+'})
return context
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。