2010-08-31 74 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