我需要检索有关我的用户的一些信息,并且我正在努力避免进行不必要的数据库调用.

我需要的信息存储在三个模型中:用户、用户配置文件和成员资格.

UserProfile和Membership都与用户模型具有一对一关系.

我知道我可以使用SELECT_Related()在单个调用中从数据库中检索相关模型.所以我可以做一些类似的事情:

User.objects.select_related('userprofile').select_related('membership').get(id=request.user.id)

但这肯定是不正确的,因为如果我使用一些用户信息进行查询,这意味着我已经在上一次调用中检索到了这些信息.

那么,将数据库调用降至最低的最佳方式是什么呢?有没有可能在一次通话中就能获得这3款车型的信息?

推荐答案

DRF在认证类内部执行与用户相关的数据库查询.请参见源here.因此,如果您需要优化此查询,您应该实现自定义身份验证类(请参阅详细信息here),覆盖authenticate_credentials方法并在其中使用优化查询.

Django相关问答推荐

Django在保存时更新m2m对象

如何在REST框架中以SON格式返回错误,而不是HTML格式返回错误?

Django动态页面.为什么我的代码不工作?

没有与给定查询匹配的监视列表

Django 中模型将数据存储在哪里?

如何在 Fargate 容器中运行的 Django 中使用 AWS SES?

如何将多个模型添加到单个列表视图?

Django模型中的密码字段

如何将表单中的用户字段设置为当前登录的用户?

Django InlineModelAdmin:部分显示内联模型并链接到完整模型

Django Blob 模型字段

有没有办法将变量传递给 Django 中的 extended模板?

Django:将原始html(来自数据库)显示为html,而不是呈现

通过 django shell 保存图像/文件

如何使用 django-nose 运行单个测试或单个 TestCase?

从 django/python 中的 request.POST 检索列表项

具有 2 种语言的 Django 站点

django.db.utils.OperationalError 无法连接到服务器

将 AND 和 OR 与 Q 对象组合的 Django 查询过滤器不返回预期结果

如何使用 Django/nginx 部署仅限 HTTPS 的站点?