Django-order_by是一个使用字段INT部分的查询集



我有这个查询:

qs = MyObject.objects.all()

在我的MyObject模型中,我有case_number字段。它是一个CharField,值是int和字符串的组合,类似于"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')

任何帮助都将不胜感激!

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')

最新更新