2010-08-31 70 views
1

我有一个简单的模型Django的ORDER_BY空白

title = models.CharField(max_length=250) 
url = models.CharField(max_length=250) 
title_french = models.CharField(max_length=250) 

我想通过title_french订购它,但是当它在A-Z订单这样,所有的空值是在顶部。在空白值的情况下,我显示英文标题。

因此,我得到法国标题的A-Z,但在顶部有一个无序的英文标题负荷。

有什么建议吗?

回答

1

对于你的情况,我认为你应该在你的python代码中进行排序(目前,因为它是在数据库中进行排序)。在数据库中做你想做的事是不可能的,至少不用手工编写sql。

这样的想法是做这样的事情在你看来:

your_objects = list(YourObject.objects.filter(....)) 

your_objects.sort(key=lambda ob: ob.title_french if ob.title_french else ob.title) 

只要你那种小名单,这不应该是一个问题太多性能问题。

+0

“它不可能在Django”,这就是我想知道的,再加上感谢替代解决方案 - 它看起来很整洁! – Mark 2010-09-01 08:16:34

1

有你在多个领域(doc)试图排序:

ordering = ('title_french', 'title') 
0

同时指定列,在ORDER_BY

queryset.order_by('title_french', 'title') 

title_frenchtitle_frenchtitle将给予第一选择,如果有两个条目与相同的title_french那么那两个条目将按它们排序title

+0

但是,这将命令英语和弗雷奇,因为弗氏有很多空白,所有的英语都是第一个。 我想要我的订单首先有所有非空白frech,然后是英文,或者只是一切英文/法文AZ – Mark 2010-08-31 13:02:04