python - 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')
任何帮助,将不胜感激 !
解决方案
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')
推荐阅读
- itext7 - 如何将 CPS 链接信息添加到法律声明选项卡?
- python - 如何在 Tkinter 中创建字体轮廓
- node.js - 如何防止恶意软件上传以保存网络公共图像?
- laravel - 跨域请求被阻止 Laravel
- excel - 在 Angular 中使用 xlsx - 如何让 excel 自动将日期识别为列中的实际日期?
- python - Tensorflow 网络摄像头对象检测未启动
- php - 用 PHP 生成 Csv - 输出不必要的引号
- ruby-on-rails - 通过 ssh 与 ubuntu 18 连接
- java - 如何修复netbeans中的getrowcount()?
- android-studio - RecylerView to pdf