Django 查询首先保留特定项目,然后将 order_by 应用于其余项目
Django query to keep perticular item at first and then apply order_by to rest of the items
假设我们有一个 Article 模型。
class Article(models.Model):
id = int
name = char
我想获取所有文章,但名称为“Whosebug”的文章应该是查询集中的第一项,并将 order_by 应用于其余项目。例如 .order_by("name").
到目前为止我取得的成就是
queryset = Article.objects.all().order_by("name")
Whosebug = queryset.get(name="Whosebug")
query = queryset.exclude(name="Whosebug")
articles = []
articles.extend(Whosebug)
articles.extend(query)
但这至少会访问数据库 4 次。
我们能以更好的方式做到这一点吗?
from django.db.models import Case, When
articles = Article.objects.order_by(
Case(When(name="Whosebug", then=0), default=1)
)
参考:https://docs.djangoproject.com/en/3.1/ref/models/conditional-expressions/
假设我们有一个 Article 模型。
class Article(models.Model):
id = int
name = char
我想获取所有文章,但名称为“Whosebug”的文章应该是查询集中的第一项,并将 order_by 应用于其余项目。例如 .order_by("name").
到目前为止我取得的成就是
queryset = Article.objects.all().order_by("name")
Whosebug = queryset.get(name="Whosebug")
query = queryset.exclude(name="Whosebug")
articles = []
articles.extend(Whosebug)
articles.extend(query)
但这至少会访问数据库 4 次。 我们能以更好的方式做到这一点吗?
from django.db.models import Case, When
articles = Article.objects.order_by(
Case(When(name="Whosebug", then=0), default=1)
)
参考:https://docs.djangoproject.com/en/3.1/ref/models/conditional-expressions/