我在 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 也运行良好。如果需要,我很乐意提供更多说明。谢谢...
从我的
permission_classes = (IsAuthorOrReadOnly,)
中删除 CustomUserViewSet
解决了问题。
不知道为什么,但我猜视图集对 PostViewSet 和 CustomUserViewSet 中的
permission_classes
的重复不满意。