python - 按特定顺序对带有浮点值的查询集进行排序(如软件版本)
问题描述
我正在使用 django,我想得到你的帮助,以便按照我的意愿对我的查询集进行排序。我的查询集从模型中获取版本列表。
这是我的查询集:
def actual_edition():
return MyModel.objects.values_list('version', flat=True).filter(smt__isnull=False, published=True).order_by('version').first()
它给了我:
<QuerySet ['10.0', '9.10', '9.8', '9.9']>
但我想处理我的查询集,以便按以下顺序显示结果:
<QuerySet ['9.8', '9.9', '9.10', '10.0']>
version 字段是我模型中的 CharField(例如,我无法将其更新为 FloatField)。我找不到用 Django 做到这一点的方法。任何想法 ?
谢谢 !
解决方案
假设您使用的是 postgres,您可以使用string_to_array
. 这个问题在这里解决了它的SQL部分。
对于 Django,您需要一个自定义Func
:
from django.db.models import Func
class StringToArray(Func):
template = "%(function)s(%(expressions)s, '.')"
function = 'string_to_array'
然后你的 QuerySet 看起来像:
MyModel.objects.filter(
smt__isnull=False,
published=True,
).annotate(
version_array=StringToArray('version'),
).order_by('version_array').values_list('version', flat=True).first()
推荐阅读
- html - 如何从停留(或任何其他 html 元素)中剪切形状
- pytorch - 在 PyTorch 中,forward() 和普通方法有什么区别?
- sql-server - 如何获取与照片关联的参与者列表及其同意值?
- assembly - MIPS 代码拒绝加载。立即冻结 QTSpin
- c# - 自 Microsoft.Data.Sqlite 3.0.0 以来无法访问我的 SQLite 数据库
- wordpress - 如何将商店网址中的产品移动到我主页的主菜单上?
- javascript - 如何修改此主题标签正则表达式以检查第二个字符是 az 还是 AZ?
- java - 在选项卡中包含活动会导致全屏活动
- c++ - 如何在 C++ 的单独文件中定义成员结构
- mysql - MySQL Workbench 6.3 移动Mysql后找不到performance_schema