我正在使用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以便按以下顺序显示结果:
<QuerySet ['9.8', '9.9', '9.10', '10.0']>
版本字段在我的模型中是一个CharField(例如,我不能将其更新为FloatField)。
我找不到使用Django的方法。任何想法 ?
谢谢 !
最佳答案
假设您正在使用postgres,则可以使用string_to_array
。此question here解决了它的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()
关于python - 按特定顺序对带有浮点值的查询集进行排序(例如软件版本),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56168763/