我有这个查询:
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')