Ошибка теста проекта api_yatube
AssertionError: Проверьте, что POST-запрос с корректными данными от авторизованного пользователя к /api/v1/posts/{post.id}/comments/ возвращает ответ со статусом 201
urls.py:
from django.urls import include, path
from rest_framework import routers
from rest_framework.authtoken import views
from .views import CommentViewSet, GroupViewSet, PostViewSet, UserViewSet
app_name = "posts"
router = routers.DefaultRouter()
router.register(r"posts", PostViewSet, basename="posts")
router.register(r"groups", GroupViewSet, basename="groups")
router.register(r"users", UserViewSet, basename="users")
router.register(
r"posts/(?P<post_id>[^/.]+)/comments", CommentViewSet, basename="comments"
)
urlpatterns = [
path("v1/", include(router.urls)),
path("v1/api-token-auth/", views.obtain_auth_token, name="auth_token"),
]
views.py:
from django.shortcuts import get_object_or_404
from rest_framework import status, viewsets
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from posts.models import Comment, Group, Post, User
from .permissions import OwnerOrReadOnly
from .serializers import (
CommentSerializer,
GroupSerializer,
PostSerializer,
UserSerializer,
)
class GroupViewSet(viewsets.ModelViewSet):
queryset = Group.objects.all()
serializer_class = GroupSerializer
def create(self, request, *args, **kwargs):
return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)
def destroy(self, request, *args, **kwargs):
return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)
def update(self, request, *args, **kwargs):
return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)
class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
permission_classes = (OwnerOrReadOnly, IsAuthenticated)
def perform_create(self, serializer):
serializer.save(author=self.request.user)
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
class CommentViewSet(viewsets.ModelViewSet):
serializer_class = CommentSerializer
permission_classes = (OwnerOrReadOnly, IsAuthenticated)
def get_queryset(self):
post = get_object_or_404(Post, pk=self.kwargs.get("post_id"))
return Comment.objects.filter(post=post)
def perform_create(self, serializer):
serializer.save(author=self.request.user)
serializers.py
from rest_framework import serializers
from posts.models import Comment, Group, Post, User
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = (
"id",
"username",
"first_name",
"last_name",
)
ref_name = "ReadOnlyUsers"
class CommentSerializer(serializers.ModelSerializer):
author = serializers.SlugRelatedField(
slug_field="username", read_only=True
)
class Meta:
model = Comment
fields = ("id", "author", "post", "text", "created")
read_only_fields = ("author", "post")
class GroupSerializer(serializers.ModelSerializer):
class Meta:
model = Group
fields = "__all__"
class PostSerializer(serializers.ModelSerializer):
author = serializers.SlugRelatedField(
slug_field="username", read_only=True
)
class Meta:
model = Post
fields = ("id", "text", "pub_date", "author", "image", "group")
Источник: Stack Overflow на русском