2017-05-24 96 views
0

所以我在Django做了一個排行榜。它除了喝醉之外還有很多東西。Django按降序排列故障

enter image description here

這是不正常的! 70高於540和200!它應該在第三名而不是第一名!爲什麼會發生這種情況,我該如何解決這個問題。

我命令在使用此降序使用全部或totalpoints排行榜:participants = Participant.objects.order_by('-totalpoints')

70時缺少這並沒有發生。現在,當它在那裏它小故障。此外,所有挑戰都會增加總點數,如果使用ASCII或其他方式存在問題,則會導致崩潰。

任何幫助將不勝感激謝謝!

編輯:替換最後一個字段作爲IntegerField,現在是按升序...

編輯編輯:當挑戰1,2,3,4結合他們在CharFields後轉換爲整數。所以這是一個整數投入到一個領域。除了現在用一個IntegerField替換了總點數之外,排行榜首先排序了這些頂點。

+2

確定totalpoints是整數?如果「70」,「540」和「200」是按字典順序排序的字符串,則排序是正確的。如果情況並非如此,則必須向我們顯示您的代碼。 [mcve] –

+0

我改了一個小問題現在檢查 – MatejMecka

回答

1

你還沒有顯示任何代碼,所以很難說,但這看起來像是一個排序數字字符串的情況。您的總分數據不是數字,而是字符串。

如果您排序看起來像數字的字符串列表,他們不排序像數字。第一個數字是最顯著,並確定排序順序:

>>> sorted(['200', '70', '540'], reverse=True) 
['70', '540', '200'] 

如果數字,他們正常工作,對它們進行排序:

>>> sorted([200, 70, 540], reverse=True) 
[70, 200, 540] 
+1

好眼!你可以添加到這個答案,如果是這樣的話,OP應該使該字段成爲'IntegerField'或使用這個技巧:https://stackoverflow.com/questions/8941962/ordering-query-result-by-numeric -strings功能於Django的Postgres的,後端 – slezica

1

您必須將您的totalpoints存儲爲字符串而不是整數。這意味着您會看到按字母順序排列的數字(反過來,由於-)。

如果您將totalpoints字段存儲在IntegerField中,則應該有更好的結果。