Django元管理员排序 - 排除语法文章

时间:2012-01-01 19:43:46

标签: python django admin

我目前有一大堆型号代码:

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,等),只是按照文章后面的单词对结果进行排序?

为了更进一步,也许有办法像这样布置结果......

  • Fry Chronicles,
  • 银河旅行指南,A

至于将文章移到书名的末尾?

有人可以提出解决上述两个问题的方法吗?

提前致谢!

3 个答案:

答案 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....