【发布时间】:2021-06-16 01:19:23
【问题描述】:
假设我们有一个 Article 模型。
class Article(models.Model):
id = int
name = char
我想获取所有文章,但 name = "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 次。 我们能以更好的方式做到这一点吗?
【问题讨论】:
-
5 次怎么样?据我了解,这个 sn-p 应该只进行两个查询。检查When QuerySets are evaluated - Django docs
-
它被击中 4 次。
stackoverflow = queryset.get(name="stackoverflow")这里 1query = queryset.exclude(name="stackoverflow")这里 1articles.extend(stackoverflow)这里 1articles.extend(query)这里 1
标签: python sql django django-queryset django-orm