将用户配置文件添加到request.user

Nep*_*nat 8 python django

我有多个User类型,我以模型的形式由用户配置文件表示:

  • 学生
  • 老师

我需要在每个请求上访问特定的用户配置文件.为了避免每次我想直接添加select_relatedrequest.user对象时执行额外的查询.

我在文档中找不到任何关于它的内容.有谁知道最好的方法吗?

mfr*_*iak 11

有趣的问题.查看AuthenticationMiddlewareauth.get_user的源代码,您似乎唯一需要做的就是实现并使用您自己的身份验证后端.如果您不使用任何其他自定义后端功能,则可以继承ModelBackend,仅覆盖get_user满足您需求的方法:

class MyModelBackend(ModelBackend):
    def get_user(self, user_id):
        try:
            user = UserModel._default_manager.select_related("profile").get(pk=user_id)
        except UserModel.DoesNotExist:
            return None
        return user if self.user_can_authenticate(user) else None
Run Code Online (Sandbox Code Playgroud)

当然,您需要将其添加到您的设置AUTHENTICATION_BACKENDS.

  • 有趣的答案. (2认同)