【问题标题】:request.user on AbstractUser gives AnonymousUser TypeErrorAbstractUser 上的 request.user 给出 AnonymousUser TypeError
【发布时间】:2021-05-16 13:47:36
【问题描述】:

在 AbstractUser 模型上调用 request.user 会导致 TypeError 'AnonymousUser' 对象不可迭代。

我这样创建了一个抽象的用户模型:

class User(AbstractUser):
    username            = models.CharField(blank=True, null=True, max_length=30)
    email               = models.EmailField(_('email address'), unique=True)

    USERNAME_FIELD      = 'email'
    REQUIRED_FIELDS     = ['username', 'first_name', 'last_name']

    def __str__(self):
        return "{}".format(self.email)

我将 JSON Web 令牌添加到我的用户模型中。我想在访问特定 URL 时获取当前用户的详细信息。为此,我在 views.py 中进行了尝试:

@api_view(['GET'])
def getUserProfile(request):
    user = request.user
    serializer = UserSerializer(user, many=True)
    return Response(serializer.data)

这在 serialisers.py 中

from django.conf import settings
User = settings.AUTH_USER_MODEL

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'

现在,当我转到调用此视图的 url 时,我得到 TypeError 'AnonymousUser' object is not iterable。我认为这是因为 request.user 无法识别我的 AbstractUser。即使我已登录,也会出现此问题。如何解决此问题?

【问题讨论】:

    标签: javascript python django django-rest-framework jwt


    【解决方案1】:

    在您的views.py 中,您设置了serializer = UserSerializer(user, many=True)。通过设置many=True,您告诉 DRF 查询集包含多个项目。但是这里user 是一个对象。这就是导致异常的原因。尝试像这样删除该部分:

    serializer = UserSerializer(user)
    

    【讨论】:

    • 谢谢。这解决了这个错误,但现在我有一个 AttributeError 说:“str”对象没有属性“_meta”。你知道如何解决这个问题吗?
    猜你喜欢
    • 2017-01-02
    • 2016-02-21
    • 2017-11-22
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多