Python 有没有办法在Django中使用order_by来指定返回结果的顺序?

Python 有没有办法在Django中使用order_by来指定返回结果的顺序?,python,django,django-views,Python,Django,Django Views,到目前为止,我只看到order_by的升序和降序用法。我想按(风险)排序,但结果以高、中、低顺序返回(这些是我在字段中的选项),而不是基于字母排序,默认情况下按顺序排序 用另一种方式来解释……我的模型中有一个字段叫做“风险”。风险在所有记录中只有3个值:高、中、低。当我在数据库上运行查询时,我希望它根据字段风险按高、中、低的顺序对查询结果进行排序,而不是它现在返回记录的随机顺序 当前代码如下所示: items = ScanData.objects.filter(Q(Owner__icon

到目前为止,我只看到order_by的升序和降序用法。我想按(风险)排序,但结果以高、中、低顺序返回(这些是我在字段中的选项),而不是基于字母排序,默认情况下按顺序排序

用另一种方式来解释……我的模型中有一个字段叫做“风险”。风险在所有记录中只有3个值:高、中、低。当我在数据库上运行查询时,我希望它根据字段风险按高、中、低的顺序对查询结果进行排序,而不是它现在返回记录的随机顺序

当前代码如下所示:

    items = ScanData.objects.filter(Q(Owner__icontains="HooliCorp")).order_by(Risk)

一种解决方案是使用一些条件语句对查询进行注释,这些语句将根据字段值输出一个数字:

items = ScanData.objects.filter(
    Q(Owner__icontains="HooliCorp")
).annotate(
    risk_order=models.Case(
        models.When(Risk='Low', then=1),
        models.When(Risk='Med', then=2),
        models.When(Risk='High', then=3),
        output_field=models.IntegerField(),
    ),
).order_by('risk_order')

这将在结果列表上创建一个编号为1到3的批注,具体取决于风险值,然后将根据此批注对查询进行排序。

我不清楚您的目标是什么。您能否共享相关模型并使用示例输入/输出来明确您的目标?保存高/中/低似乎效率低下,将这些值保存为易于排序的整数,并通过
选项将高/中/低映射到整数
是否回答了您的问题@yedpodtrzitko-我正在处理数千条记录,我上传到数据库的.csv文件以字符串High/Med/Low格式输出风险字段。我试图避免将其更改为基于数字的系统。@errMSG如果您处理的是“数千条记录”,那么您应该担心的问题不是在执行一次性DB INSERT时转换数据,而是在每个SELECT上执行非最佳查询时的性能。祝你好运。