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

标签 python django django-views

到目前为止,我只看到 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/

相关文章:

python - 在 ipython 笔记本上导入 imblearn python 包时出现问题

django - 如何在 Django rest 框架中检索外键字段?

django - MultipleObjectsReturned - get() 返回了多个 ContentType - 它返回了 2

python - 在 Django 1.7 中动态过滤 ListView CBV

python - 无法让WAF运行

python - Python Pandas 中带有加权最小二乘法的意外标准错误

python - 无法为张量 'input/Y:0' 提供形状 (100, 1) 的值,其形状为 '(?,)'

python - django-rest-framework 教程 4(身份验证和权限)问题

javascript - 如何将 csrf token 添加到 CKEDITOR 插件中上传图片的帖子请求中?

python - 切片后重新排序 Django 查询