我正在使用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/

10-16 12:31