在Django中按数字字符串排序查询结果(Postgres后端)
我有一个表格,其中有一个名字(varchar)字段,这个字段只存放数字字符串。我想按照这个字段来排序我的查询结果。但是,名字字段的排序是按字母顺序进行的,而我希望它们按数字顺序排序。
举个例子,如果我得到的名字字段值是 1、2、200 和 100,它们的排序结果是 1、100、2、200,但我希望它们的排序结果是 1、2、100、200。
我能想到以下的查询语句:
select *
from my_table as t
where t.foo='bar'
order by cast(t.name as integer);
但是我不知道怎么把这个转换成 Django 的 ORM 查询集?有没有什么办法可以做到这一点?
1 个回答
10
首先,我想问问你,为什么会有一个需要当作数字处理的varchar列,不过这不重要。
你可以使用 extra
这个查询集方法来把你的字符串转换成数字:
MyTable.objects.extra(select={'int_name': 'CAST(t.name AS INTEGER)'},
order_by=['int_name'])