Невозможно перенести валидацию из представления в сериализатор

Мне нужно перенести валидацию из views.py в serializators.py. Как я могу это сделать?

Валидация должна проверить:

  1. пользователь не может следить за собой
  2. пользователь не может следить за автором, за которым он уже следит

У меня есть ViewSet с @action:

my view.py:

@action( 

        detail=True, 

        methods=['post', 'delete'], 

        permission_classes=(permissions.IsAuthenticated,) 

    ) 

    def subscribe(self, request, id=None): 

        """Following""" 

        author_id = id 

        if request.method == 'POST': 

            author = get_object_or_404(CustomUser, id=author_id) 

            if author == request.user: 

                raise serializers.ValidationError( 

                    {'errors': 'You can't follow yourself.'} 

                ) 

            if self.request.user.follower.filter(author=author).exists(): 

                raise serializers.ValidationError( 

                    {'errors': 'You already follow this author.'} 

                ) 

            author = get_object_or_404(CustomUser, id=author_id) 

            Follow.objects.create( 

                user=request.user, author=author 

            ) 

            serializer = FollowSerializer(author, context={'request': request}) 

            return Response(serializer.data, status=status.HTTP_201_CREATED) 

        if request.method == 'DELETE': 

            user_id = request.user.id 

            subscribe = get_object_or_404( 

                Follow, user__id=user_id, author__id=author_id 

            ) 

            subscribe.delete() 

            return Response(status=status.HTTP_204_NO_CONTENT) 

и у меня есть FollowSerializer в serializers.py

my serializers.py

class FollowSerializer(serializers.ModelSerializer): 


    class Meta: 

        model = CustomUser 

        fields = ('email', 'id', 'username', 'first_name', 

                  'last_name', 'is_subscribed', 'recipes', 'recipes_count') 

Я пытаюсь добавить метод валидации, как def validate(self, data):, но он не работает.

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