如何在 django 中使用单个数据库查询将 user 和 user.profile 分配给请求对象?

问题描述 投票:0回答:1

Django 通过调用 将用户分配给 django.contrib.auth.middleware.py

中的请求

request.user = SimpleLazyObject(lambda: get_user(request))

get_user函数位于init.py文件中,该文件又调用backends.py中的另一个get_user函数

def get_user(self, user_id): try: user = UserModel._default_manager.get(pk=user_id) except UserModel.DoesNotExist: return None return user if self.user_can_authenticate(user) else None
这里正在调用数据库以通过 id 获取用户。如何在同一查询中获取用户配置文件(通过一对一字段与用户相关)并将其传播回去,以便我可以将其分配给

request.profile

django database authentication django-models django-middleware
1个回答
0
投票
让我们使用 select_lated() 来连接表并在单个查询中获取个人资料和用户,例如:

def get_user(self, user_id): profile = Profile.objects.filter(user_id=user_id).select_related("user").first() if not profile: return None return profile if self.user_can_authenticate(user) else None
    
© www.soinside.com 2019 - 2024. All rights reserved.