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?