Почему при отправке запроса на детализацию CustomUser в API Blog возникает ошибка?
У меня есть два Blog API в Django Rest Framework. Один использует стандартную модель пользователя 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
Вот мой CustomUserViewset:
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,)
Я посмотрел на место ошибки и попробовал отладку печати для печати объекта User, и в обоих случаях (модель Default User и модель CustomUser) ничего не выводится. Но модель Default User работает хорошо и возвращает данные об одном пользователе. Я также попытался распечатать свой набор запросов, и он правильно возвращает мой CustomUser.
Я хочу получить доступ к одному CustomUser из конечной точки, как это можно сделать с помощью стандартного User в Dango. Мои модели Post
и CustomUser
правильно сериализованы, и обе коллекции можно увидеть из их конечных точек. PostDetail также работает хорошо. Я буду рад предоставить дополнительные разъяснения, если это необходимо. Спасибо...
Удаление permission_classes = (IsAuthorOrReadOnly,)
из моего CustomUserViewSet
устранило проблему.
Не знаю точно, почему, но предполагаю, что набору представлений не понравилось повторение permission_classes
как в PostViewSet, так и в CustomUserViewSet.