我想要获取模型的最后10个实例,并具有以下代码:

 Model.objects.all().order_by('-id')[:10]

是不是先拿起所有实例,然后只拿最后10个实例? 有没有更有效的方法?

推荐答案

Django查询集很懒.这意味着只有当您明确请求结果时,查询才会命中数据库.

因此,在您打印或实际使用查询结果之前,您可以在没有数据库访问的情况下进一步使用过滤.

正如您在下面看到的,您的代码只执行一个SQL查询来仅获取最后10个项目.

In [19]: import logging                                 
In [20]: l = logging.getLogger('django.db.backends')    
In [21]: l.setLevel(logging.DEBUG)                      
In [22]: l.addHandler(logging.StreamHandler())      
In [23]: User.objects.all().order_by('-id')[:10]          
(0.000) SELECT "auth_user"."id", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user" ORDER BY "auth_user"."id" DESC LIMIT 10; args=()
Out[23]: [<User: hamdi>]

Django相关问答推荐

在AWS s3中获取项目的URL

如何从Django';S模型中的方法中检索值?

从多个数据库访问 Django 会话

错误404除主要应用程序外,HTML页面无法渲染的其他应用程序

如何将我的函数添加到值参数?

我如何获得已循环的每个项目的名称?

UpdateView 不会对 from 属性进行数据绑定

Django 相当于子查询

Django中的多对多关系?

"" 需要有字段 "id" 的值才能使用这种多对多关系

如何使用 jQuery 建立 Django 网站

如何在 Django 中返回静态 HTML 文件作为响应?

如何在 django 模板中将名称反转为绝对 url?

如何获取 Django 模型来自的应用程序?

Heroku - 在 Django 应用程序中处理静态文件

使用 Gunicorn 运行 Django - 最佳实践

如何使用 Requests 库执行 HTTP DELETE 请求

RemovedInDjango18Warning:不推荐创建没有fields属性或 exclude属性的 ModelForm

Django 模型方法 - create_or_update

Django 字符串到日期格式