首页 > 解决方案 > Django - order_by 使用字段的 INT 部分的查询集

问题描述

我有这个查询:

qs = MyObject.objects.all()

在我的 MyObject 模型中,我有case_number字段。它是一个 CharField,值是 int 和 string 的组合,例如“123abc”。

我想按case_number字段的 int 部分订购我的查询集。例子:

['34ohkj', '456kKJj', '12jk'] -> ['12jk', '34ohkj', '456kKJj']

我试过这个,但它不起作用,因为我无法删除字符串部分case_number

qs.annotate(case_number_int=Cast(F('case_number'), IntegerField())).order_by('case_number_int')

任何帮助,将不胜感激 !

标签: pythonsqldjango

解决方案


qs = MyObject.objects.all()

# I think this is the optimal solution. 

qs = qs.extra(select={
              'case_number_int': "Cast(F('case_number'), IntegerField()))"
    })

现在您可以在此执行订单。例如 qs = qs.order_by('case_number_int')


推荐阅读