为什么我的博客 API CustomUser 在发送 CustomUser 详细信息请求时出现错误?

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

我在 Django Rest Framework 中有两个博客 API。一个使用 Django 的默认用户模型,而另一个使用 CustomUser。身份验证在这两种情况下都运行良好。我已经配置了类似的序列化器、视图集和路由器。返回帖子和用户集合的端点与单个帖子的端点一样有效。此外,单个用户的功能仅在使用 Django 的默认用户模型时才有效。但是,当我尝试访问单个 CustomUser 时,出现此错误:

AttributeError at /api/v1/users/3/
'CustomUser' object has no attribute 'author'
Request Method: GET
Request URL:    http://127.0.0.1:3412/api/v1/users/3/
Django Version: 5.1.2
Exception Type: AttributeError
Exception Value: 'CustomUser' object has no attribute 'author'
Exception Location: C:\Users\Names\OneDrive\my_apps\django_apps\blog_API\api\permissions.py, line 16, in has_object_permission
Raised during:  api.views.CustomUserViewSet

异常发生在最后一行:

from rest_framework import permissions

class IsAuthorOrReadOnly(permissions.BasePermission):
    """
    Object-level permission to only allow authors of an object to edit it.
    Assumes the model instance has an `author` attribute.
    """

    def has_object_permission(self, request, view, obj):
        if request.method in permissions.SAFE_METHODS:
            return True
        return obj.author == request.user

这是我的自定义用户视图集:

from rest_framework import viewsets

from users.models import CustomUser
from .serializers import CustomUserSerializer
from .permissions import IsAuthorOrReadOnly


class CustomUserViewSet(viewsets.ModelViewSet):
    """Viewset for Custom User Object."""
    queryset = CustomUser.objects.all()
    serializer_class = CustomUserSerializer
    permission_classes = (IsAuthorOrReadOnly,)

我查看了错误的位置并尝试打印调试来打印用户对象,在两种情况下(默认用户模型和自定义用户模型),都没有打印任何内容。但默认用户模型运行良好并返回单个用户的详细信息。我还尝试打印我的查询集,它正确返回我的 CustomUser。

我想从端点访问单个 CustomUser,就像使用 Dango 的默认用户一样。我的

Post
CustomUser
模型已正确序列化,并且可以从端点看到这两个集合。 PostDetail 也运行良好。如果需要,我很乐意提供更多说明。谢谢...

python django django-rest-framework django-rest-viewsets django-custom-user
1个回答
0
投票

从我的

permission_classes = (IsAuthorOrReadOnly,)
中删除
CustomUserViewSet
解决了问题。

不知道为什么,但我猜视图集对 PostViewSet 和 CustomUserViewSet 中的

permission_classes
的重复不满意。

© www.soinside.com 2019 - 2024. All rights reserved.