gpt4 book ai didi

django - Django 中的排序顺序 : possible to ignore "The" prefix when sorting?

转载 作者:行者123 更新时间:2023-12-02 08:48:58 25 4
gpt4 key购买 nike

这看起来像是 Django 使事情变得简单的事情,想知道是否有人有这方面的经验。

我有一张乐队表,其中一些被称为“The Geeks”(例如)。我希望它们按字母顺序出现在“G”下。

我知道我可以做一些奇特的 SQL 来动态重写它们并以这种方式排序,但是 Django 是否提供了任何内置功能,以便我可以保留我漂亮的 Band.objects.all()语法并仍然按自定义排序进行过滤?

我知道我可以更改我的数据以包含 has_prefix 字段或其他内容,并将乐队名称存储为“Geeks, The”或其他名称,但如果可能的话,我宁愿不碰数据本身。

有什么建议吗?

最佳答案

以下是我在最近的 Django 项目中的做法:

from django.db import models

SomeClass(models.Model):
title = models.CharField()

@property
def alphabetical_title(self):
"""
Returns an alphabetical-friendly string of a title attribute.
"""
title = self.title

# A list of flags to check each `title` against.
starts_with_flags = [
'the ',
'an ',
'a '
]

# Check each flag to see if the title starts with one of it's contents.
for flag in starts_with_flags:
if title.lower().startswith(flag):
# If the title does indeed start with a flag, return the title with
# the flag appended to the end preceded by a comma.
return "%s, %s" % (title[len(flag):], title[:len(flag)-1])
else:
pass
# If the property did not return as a result of the previous for loop then just
# return the title.
return self.title

由于这是一个属性,而不是数据库中的实际列,因此我需要首先检索 QuerySet,然后在 View 中对其进行排序。我是这样做的:

from operator import attrgetter
from someapp.models import SomeClass

some_objects = SomeClass.objects.all()
sorted_objects = sorted(some_objects, key=attrgetter('alphabetical_title'), reverse=False)

我确信您早已找到解决方案,但我认为无论如何发布它可能会有所帮助,因为将来其他人可能会遇到同样的问题。

关于django - Django 中的排序顺序 : possible to ignore "The" prefix when sorting?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6057730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com