【问题标题】:request.user returning abstract user (django-stubs)request.user 返回抽象用户(django-stubs)
【发布时间】:2020-08-26 04:11:25
【问题描述】:

我正在尝试输入以下内容:

user: Final[CustomUser] = self.request.user

CustomUser 是我在settings.py 中定义的自定义用户模型。我的 IDE 抱怨 Expected type 'CustomUser', got 'AbstractBaseUser' instead。查看文档,它说self.request.user 返回一个AUTH_USER_MODEL 的实例,但显然这没有发生。

也试过了:

 def get(self, request: MyRequest, *args, **kwargs) -> HttpResponse:
    user: Final[CustomUser] = self.request.user

在哪里

from django.http import HttpRequest
from my_user_app.models import CustomUser

class MyRequest(HttpRequest):
    user: CustomUser

【问题讨论】:

  • request.user 为未登录的用户返回一个AnonymousUser。您的CustomUserAbstractBaseUser 的子类吗?
  • @IainShelvington 它扩展了AbstractUser。这还不够吗?
  • 您使用的是哪个 IDE/插件/框架?我不认为 Django 有类型注释
  • @IainShelvington PyCharm 和 django-stubs

标签: python django typing django-stubs


【解决方案1】:

这里有一个关于此错误的未解决问题https://github.com/typeddjango/django-stubs/issues/309

根据 django-stubs 的文档,您必须在使用自定义用户模型时提供自己的请求类型。在 PyPi 的页面底部How can I use HttpRequest with custom user model?

from django.http import HttpRequest
from my_user_app.models import CustomUser

class MyRequest(HttpRequest):
    user: CustomUser

那么你将不得不使用它来注释self.request

 def get(self, request: MyRequest, *args, **kwargs) -> HttpResponse:
    user: Final[CustomUser] = request.user

【讨论】:

  • 试过了,还是报错
  • 您可以在问题中添加您尝试过的地方吗?
  • 已编辑。这是你建议的意思吗?
  • 你不应该使用传递给方法的request参数而不是self.request吗?
  • 这里有一个关于此错误的未解决问题github.com/typeddjango/django-stubs/issues/309
猜你喜欢
  • 2017-01-02
  • 2017-11-22
  • 1970-01-01
  • 2021-08-22
  • 2022-11-24
  • 2014-12-29
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
相关资源
最近更新 更多