以下是我做這件事是最近的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
由於這是一個屬性,而不是在數據庫中實際的專欄中,我需要先檢索查詢集,然後之後對其進行排序在一個視圖中的事實。這是我怎麼做的:
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)
我敢肯定,你早就找到了一個解決方案,但我想它可能有助於它張貼反正有人在未來其他可能會遇到同樣的問題。
我剛剛發生的一件事 - 我可以在模型對象上放置一個函數,它返回'Band','樣式名稱,並對其進行排序? – 2011-05-19 11:58:22
'order_by'在數據庫級別執行,您的數據庫對python函數一無所知。但是,當然,你可以在python級別對列表進行排序(我的答案爲#2)。 – DrTyrsa 2011-05-19 12:01:34
對於上面的選項3,最好將正確排序的序列號存儲在「排序標題」字段中,而不是用字順序的變化再次重複整個標題。很少使用空間。 – Ubuntourist 2012-09-06 21:22:17