将用户个人资料添加到request.user

时间:2019-02-21 11:45:08

标签: python django

我有多个User类型,这些类型由用户个人资料以模型的形式表示:

  • 学生
  • 老师

我需要在每次请求时访问特定的用户个人资料。 为了避免每次都要执行额外的查询,我想直接向select_related对象中添加一个request.user

我在文档中找不到任何有关它的信息。有人知道最好的方法吗?

1 个答案:

答案 0 :(得分:12)

有趣的问题。查看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

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