Django Like Function с наборами представлений

Привет ребята я пытаюсь сделать приложение для блога

Я беру "деталь": "Метод "POST" не разрешен."

whwn Я посылаю запрос get на "/blog/like/1,2...". Я получаю ответ, но не могу отправить Post запрос

То есть Модели

class Like(models.Model):
    created_by = models.ForeignKey(User, on_delete=models.CASCADE)
    post = models.ForeignKey(Post, on_delete=models.CASCADE)

    def __str__(self):
        return self.created_by.username

Это сериализаторы

class LikeSerializer(serializers.ModelSerializer):
    created_by = serializers.StringRelatedField()
    post = serializers.StringRelatedField()

    class Meta:
        model = Like
        fields = (
            'created_by',
            'post',
            'post_id'
        )

Это просмотры

class LikeView(viewsets.ModelViewSet):
    queryset = Like.objects.all()
    serializer_class = LikeSerializer
   

    def perform_create(self, serializer):
        serializer.save(created_by=self.request.user)

    def post(self, post_id):
        post = Post.objects.get(id=post_id)
        if Like.objects.filter(post=post, created_by=self.request.user).exists():
            Like.objects.filter(
                post=post, created_by=self.request.user).delete()
        else:
            Like.objects.create(post=post, created_by=self.request.user)

это урлы

from django.urls import path
from .views import (
    PostView,
    PostView_View,
    LikeView,
    CommentView
)
from rest_framework import routers

router = routers.DefaultRouter()
router.register('', PostView)
router.register('like', LikeView)


urlpatterns = [

] + router.urls

При использовании ModelViewSet вы можете разместить пост запрос таким образом:

class UserViewSet(viewsets.ModelViewSet):
"""
A viewset that provides the standard actions
"""
queryset = User.objects.all()
serializer_class = UserSerializer

@action(detail=True, methods=['post'])
def set_password(self, request, pk=None):
    user = self.get_object()
    serializer = PasswordSerializer(data=request.data)
    if serializer.is_valid():
        user.set_password(serializer.validated_data['password'])
        user.save()
        return Response({'status': 'password set'})
    else:
        return Response(serializer.errors,
                        status=status.HTTP_400_BAD_REQUEST)

Этот пример с официального сайта Django Rest Framework

Ссылка: https://www.django-rest-framework.org/api-guide/viewsets/

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