到目前为止,我只看到 order_by 的升序和降序用法。我想要 order_by(Risk) 但结果以高、中、低顺序返回(这些是我在该领域的选项),而不是基于字母排序,order_by 是默认完成的方式。
以不同的方式解释它......我的模型中有一个名为“风险”的字段。风险在所有记录中只有 3 个值,高、中、低。当我在数据库上运行查询时,我希望它根据字段 Risk 按高、中、低的顺序对查询结果进行排序,而不是它现在返回记录的随机顺序。
当前代码如下所示:
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 数字的注释,具体取决于风险值,然后它将按此注释对查询进行排序。
关于python - 有没有办法在Django中使用order_by来指定返回结果的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66803535/