在django(postgres后端)中按数字字符串排序查询结果

时间:2012-01-20 13:12:20

标签: python django postgresql orm

我有一个名称(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 querysets?有没有办法做到这一点?

1 个答案:

答案 0 :(得分:10)

我首先要问的是为什么你有一个需要被视为数字的varchar列,但不要介意。

您可以使用extra queryset方法转换字符串:

MyTable.objects.extra(select={'int_name': 'CAST(t.name AS INTEGER)'},
                      order_by=['int_name'])