python - Django 查询首先保留特定项目,然后将 order_by 应用于其余项目
问题描述
假设我们有一个 Article 模型。
class Article(models.Model):
id = int
name = char
我想获取所有文章,但名称为“stackoverflow”的文章应该是查询集中的第一项并将 order_by 应用于其余项目。例如 .order_by("name")。
到目前为止我取得的成就是
queryset = Article.objects.all().order_by("name")
stackoverflow = queryset.get(name="stackoverflow")
query = queryset.exclude(name="stackoverflow")
articles = []
articles.extend(stackoverflow)
articles.extend(query)
但这至少会命中数据库 4 次。我们能以更好的方式做到这一点吗?
解决方案
from django.db.models import Case, When
articles = Article.objects.order_by(
Case(When(name="stackoverflow", then=0), default=1)
)
参考:https ://docs.djangoproject.com/en/3.1/ref/models/conditional-expressions/
推荐阅读
- coq - 模式匹配两个列表,其类型依赖于 Coq
- node.js - 我们如何在 AWS EC2 上为 laravel (https//:example.com) 和 nodejs (https//:example.com:8443) 使用相同的域?
- powershell - PowerShell - 展开组对象
- r - 跨列删除重复项
- html - 无法在特定网站上找到特定元素
- docker - 是否有适当的方法为 docker-compose 动态生成秘密?
- r - 列重新排列 csv 文件 R 或 Excel
- python - 列出我的 s3 中存在的每个存储桶中的对象
- javascript - 使用 Firebase 函数使用外部 api
- python - Python:如何设置触发函数的时间?