所以我在Django做了一个排行榜。它做的大多数东西很棒,除了喝醉的东西。
这不正常! 70高于540和200!它应该在第三名而不是第一名!为什么会发生这种情况,我该如何解决它。
我使用Total或totalpoints
按降序排序使用此排行榜:participants = Participant.objects.order_by('-totalpoints')
70失踪时没有发生这种情况。现在当它在那里时它会出现故障。此外,总点数是从所有挑战中添加的,如果在存在问题时使用ASCII或其他东西,它将会崩溃。
任何帮助都将不胜感激,谢谢!
编辑:将最后一个字段替换为IntegerField,现在它处于升序...
编辑编辑:当挑战1,2,3,4组合时,它们在CharFields中后来转换为整数。所以这是一个Integer进入一个领域。除非现在用IntegerField替换了totalpoints,否则排行榜首先会排序emptry。
答案 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]