2017-06-20 153 views
1

我有一個ID爲參考數字和年份格式爲:整理分割字符串Django的ORM

1/17 
98/15 
2/17 
112/17 
2345/17 
67/17 
9/17 
8974/16 

當我得到我的ID了使用Django ORM:

obj = MyIDs.objects.filter(run='run_1').order_by('ID') 

我讓他們出在第一號的順序:

1/17 
112/17 
2/17 
2345/17 
67/17 
8974/16 
9/17 
98/15 

然而,隨着/後的數字是一年,我想在今年次對它們進行排序編號。我能夠在mySQL(使用子字符串索引等)中輕鬆完成此操作,並且如果它是一個Python列表,但由於我現在想在發送給我的html模板之前不處理我的對象,有沒有辦法做到這一點在orm中?

回答

0

我相信this question的答案有你在找什麼。簡而言之,您可以使用extra函數在您的django查詢中使用自定義SQL。

0

Django 2.0目前處於alpha階段,但它有StrIndex函數可能會有所幫助。我沒有測試過這個,但它是你可以做的一個草稿。斜線將保留在字符串中,但由於您只是對它進行排序,所以我認爲這不會對您造成問題。

MyIDs.objects.filter(run='run_1').annotate(
    slash_pos=StrIndex(F('id'), '/') 
).annotate(
    y=Substr(F('id'), F('slash_pos')) 
).order_by('y', 'id')