2009-06-09 117 views
2

我有Django模型是項目列表,我希望每個列表上的項目具有單獨的排序順序。也許列表1會按名稱對行項目進行排序,按日期列出2,並按優先級列出3。指定Django相關型號排序順序

這些模型看上去或多或少是這樣的:

class ListItem(models.Model): 
    priority = models.IntegerField(choices=PRIORITY_CHOICES) 
    name = models.CharField(max_length=240) 
    due_date = models.DateTimeField(null=True, blank=True) 
    list = models.ForeignKey(List) 

現在,我使用此查詢在我看來:

lists = List.objects.filter(user=request.user) 
return render_to_response('showlists.html', {'lists': lists }) 

我讀過的例子暗示,我可以做這樣的事情:

lists = List.objects.filter(user=request.user).select_related().order_by("items.name") 

假設工作,它會給我的列表集合相同爲每批物品排序。我將如何去分類每個單獨列表的相關項目?

回答

3

跨相關車型訂購的語法是相同的雙下劃線格式爲filter,所以你可以做:

List.objects.filter(user=request.user).select_related().order_by("listitems__name") 

你應該能夠使用不同的字段在order_by調用中採用相同的方式。

+0

謝謝。是否有一種簡單的方法可以對每個列表進行不同的處理,還是需要將它們分開並逐一進行排序? – 2009-06-09 15:05:59

2

如果列表是小的,那麼你可以do it in python,採用分類和標記

list = <...code to get sublist here ...> 
list.sort(key=lambda x: x.due_date) #sort by due date, say 

否則揭開序幕查詢每個子列表