假设我们有一个文章模型。
class Article(models.Model):
id = int
name = char
我想获取所有文章,但 name = "stackoverflow" 的文章应该是 queryset 中的第一项,并将 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 次。 我们能否以更好的方式做到这一点?
答案 0 :(得分:1)
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/