order_by中的Django字母数字排序

时间:2010-02-16 15:58:17

标签: django

我的问题是exactly like this one,除了它是在Django中返回的查询。

我想要

返回的字段
text_all = RawText.objects.filter(id__contains=county.short_code).order_by('id')

的形式返回
1,1
2,1
10,1

而不是:

1,1
10,1
2,1

我该怎么办?注: ID是一个char字段,必须是因为逗号。

谢谢!

3 个答案:

答案 0 :(得分:1)

如果你的id代表十进制数,你最好在数据库中使用正确的数据类型,并决定在其他地方显示char','(可能通过玩国际化)。

否则,您必须在检索数据后在应用程序级别编写自己的排序方法。

答案 1 :(得分:1)

您可以将文字字段设为固定长度,而不是

1,1
10,1
2,1

你有

001,1
002,1
010,1

答案 2 :(得分:0)

第一种方法:在RawText模型中有两个额外的数字列,第一列将对应于id的第一部分,第二列将对应于id的第二部分。这种方式很简单:

text_all = RawText.objects.filter(id__contains=county.short_code).order_by('first_part', 'second_part')

替代方法:在您的应用程序中完成排序:

  1. 提取ids的两个数字部分
  2. 对查询集进行排序
  3. 另一种方法:您可以将您的id而不是char设置为Decimal类型,这样您就可以将其排序为数字:

    1.1
    2.1
    10.1