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/