我目前有一大堆型号代码:
class Book(models.Model):
title = models.CharField(max_length=100)
num_pages = models.IntegerField(blank=True, null=True)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
def __unicode__(self):
return self.title
class Meta:
ordering = ["title"]
如果我有一本名为“ The Fry Chronicles ”的书名或“银河系搭便车指南”(例如),有没有办法让Django忽略管理界面中单词之前的那些短文( an,a,等),只是按照文章后面的单词对结果进行排序?
为了更进一步,也许有办法像这样布置结果......
至于将文章移到书名的末尾?
有人可以提出解决上述两个问题的方法吗?
提前致谢!
答案 0 :(得分:2)
你可以试试,
class Book(models.Model):
displayed_title = models.CharField(max_length=100)
ordered_title = models.CharField(max_length=100)
def __unicode__(self):
return self.displayed_title
class Meta:
ordering = ["ordered_title"]
并确保在存储之前解析ordered_title
。
答案 1 :(得分:1)
如果不破解内部django管理员代码,我认为这是不可能的。
如果某些冗余不是问题,您可以做一些小技巧。在Book中有其他字段代表订阅标题(例如clean_title
),并在管理中使用ordering
attribute。
答案 2 :(得分:-1)
不知道这是否有效....未经测试......只是想一想django只是蟒蛇......我希望这有助于让你走上正确的轨道!?!
def splitter(title):
list_title=[]
a = split(title)
for word in a:
if len(word) > 3: # With this you filter "a" "the" etc. but not "Bob" etc.!!
word.append(list_title)
return list_tile
class Meta:
ordering = splitter(title) # not sure if this is working....