按降序排序的Django是搞笑的

时间:2017-05-24 21:20:17

标签: python django

所以我在Django做了一个排行榜。它做的大多数东西很棒,除了喝醉的东西。

enter image description here

这不正常! 70高于540和200!它应该在第三名而不是第一名!为什么会发生这种情况,我该如何解决它。

我使用Total或totalpoints按降序排序使用此排行榜:participants = Participant.objects.order_by('-totalpoints')

70失踪时没有发生这种情况。现在当它在那里时它会出现故障。此外,总点数是从所有挑战中添加的,如果在存在问题时使用ASCII或其他东西,它将会崩溃。

任何帮助都将不胜感激,谢谢!

编辑:将最后一个字段替换为IntegerField,现在它处于升序...

编辑编辑:当挑战1,2,3,4组合时,它们在CharFields中后来转换为整数。所以这是一个Integer进入一个领域。除非现在用IntegerField替换了totalpoints,否则排行榜首先会排序emptry。

2 个答案:

答案 0 :(得分:1)

您必须将totalpoints存储为字符串而不是整数。这意味着您将看到所订购的数字"按字母顺序排列" (相反,由于-)。

如果您将totalpoints字段存储在IntegerField中,则应该会有更好的结果。

答案 1 :(得分:1)

您没有显示任何代码,因此很难确定,但这看起来像是排序数字字符串的情况。您的总分数据不是数字,而是字符串。

如果对符合数字的字符串列表进行排序,则不会对数字进行排序。第一个数字是最重要的,并将确定排序顺序:

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

如果您将它们排序为数字,它们可以正常工作:

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