我有一个名称(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?有没有办法做到这一点?
答案 0 :(得分:10)
我首先要问的是为什么你有一个需要被视为数字的varchar列,但不要介意。
您可以使用extra
queryset方法转换字符串:
MyTable.objects.extra(select={'int_name': 'CAST(t.name AS INTEGER)'},
order_by=['int_name'])