API блога с DRF получает ошибку анонимного пользователя

Я создаю BlogAPI с LoginAPI (используя dj-rest-auth). Я создал модель для моего Post-

models.py

        from django.db import models
        from django.contrib.auth.models import User
    
        class Post(models.Model):
        content = models.TextField()
        user = models.ForeignKey(User, on_delete=models.CASCADE)

Тогда я сделал 2 сериализатора User и Post -

serializers.py

from rest_framework import serializers
from django.contrib.auth.models import User
from .models import Post
class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['username', 'id', 'email']


class PostSerializer(serializers.ModelSerializer):
    user = serializers.PrimaryKeyRelatedField(read_only=True)

    class Meta:
        model = Post
        fields = ['user', 'content']

Мое представление выглядит следующим образом-

views.py

from rest_framework import viewsets, permissions
from .serializers import UserSerializer, PostSerializer, CommentSerializer
from . import models
from rest_framework.response import Response
from rest_framework.decorators import action, api_view, permission_classes


class UserViewSet(viewsets.ModelViewSet):
    queryset = models.User.objects.all()
    serializer_class = UserSerializer


class PostViewSet(viewsets.ModelViewSet):
    queryset = models.Post.objects.all()
    serializer_class = PostSerializer
    permission_classes = [permissions.AllowAny]

    def create(self, request):
        serializer = PostSerializer(
            data=request.data, context={'request': request})
        serializer.is_valid(raise_exception=True)
        print(request.data)
        print(request.user)

        serializer.save(user=request.user)
        return Response(serializer.data)

Я сохранил класс_разрешений как AllowAny, потому что тогда я не смог протестировать API.

urls.py (внутри приложения)

router = routers.DefaultRouter()
router.register(r'^users', views.UserViewSet)
router.register(r'^posts', views.PostViewSet)

urlpatterns = [
    path('', include(router.urls)),
    re_path(r'^posts/(?P<pk>\d+)/comments/$', view=views.PostViewSet.as_view({'get': 'comments', 'post': 'comments'})),
    re_path(r'^posts/(?P<pk>\d+)/comments/(?P<comment>\d+)/$', view=views.PostViewSet.as_view({'delete': 'remove_comment'}))
]

После запуска на locahost на http://127.0.0.1:8000/posts/ я могу сделать GET и увидеть все сообщения всех пользователей, но после Posting я получаю эту ошибку-

Как мне передать пользователя в качестве внешнего ключа в seriliazers.py и получить аутентифицированного пользователя для POST?

Вернуться на верх