Serializer.is_valid django rest framework при создании подписки

В моем проекте foodgram необходимо сделать возможность подписыватьcя на пользователей. Проверяю через postman. При отправке запроса на подписку http://127.0.0.1:8000/api/users/1/subscribe/ мне выдает ошибку:

Not Found: /api/users/1/subscribe/
[17/Nov/2022 12:03:27] "POST /api/users/1/subscribe/ HTTP/1.1" 404 23

В postman:

{
    "detail": "Not found."
}

В тоже время подписка создается, ее видно при просмотре всех подписок. Также подписка успешно удаляется.

После проверки, видно, что не проходит после валидации serializer.is_valid(raise_exception=True).
Также не доходит то функции def validate в сериализаторе FollowCreateSerializer.

Помогите, если у кого есть хоть какието мысли.

Python 3.7.9 Django 3.2.16 djangorestframework 3.12.4

View создания подписки

class CustomUserViewSet(UserViewSet):
    """ Вьюсет для пользователя с подписками
    через POST&GET. """

    queryset = CustomUser.objects.all()
    serializer_class = CustomUserSerializer
    permission_classes = (IsAuthenticated,)
    pagination_class = LimitPageNumberPagination

    @action(detail=True, methods=['POST'], url_path='subscribe')
    def user_subscribe_add(self, request, id):
        user = request.user
        # print(user)
        following = CustomUser.objects.filter(pk=id)
        # print(following)
        # following = get_object_or_404(CustomUser, pk=id)
        serializer = FollowCreateSerializer(
            data={'user': user.id, 'following': id},
            context={'request': request})
        print('test')
        serializer.is_valid(raise_exception=True)
        print('test')
        serializer.save()
        follow = get_object_or_404(Follow, user=user, following=following)
        serializer = FollowSerializer(follow.following,
                                      context={'request': request})
        return Response(serializer.data, status=status.HTTP_201_CREATED)

Follow Serializer:

class FollowSerializer(serializers.ModelSerializer):
    """ Создаем сериализатор для подписок. """

    email = serializers.ReadOnlyField(source='following.email')
    id = serializers.ReadOnlyField(source='following.id')
    username = serializers.ReadOnlyField(source='following.email')
    first_name = serializers.ReadOnlyField(source='following.first_name')
    last_name = serializers.ReadOnlyField(source='following.last_name')
    is_subscribed = serializers.SerializerMethodField(default=True)
    recipes = serializers.SerializerMethodField()
    recipes_count = serializers.SerializerMethodField()

    class Meta:
        fields = ('email', 'id', 'username', 'first_name', 'last_name',
                  'is_subscribed', 'recipes', 'recipes_count')
        model = CustomUser


    def get_is_subscribed(self, obj):
        return Follow.objects.filter(
            user=obj.user, following=obj.following).exists()

    def get_recipes(self, obj):
        request = self.context['request']
        limit = request.GET.get('recipes_limit')
        queryset = Recipe.objects.filter(author=obj.following)
        if limit:
            queryset = queryset[:int(limit)]
        return RecipeFollowSerializer(queryset, many=True).data

    def get_recipes_count(self, obj):
        return Recipe.objects.filter(author=obj.following).count()

FollowCreateSerializer

class FollowCreateSerializer(serializers.ModelSerializer):
    """ Сериализатор создания объекта Подписки. """

    user = serializers.PrimaryKeyRelatedField(
        queryset=CustomUser.objects.all()) 
    following = serializers.PrimaryKeyRelatedField(
        queryset=CustomUser.objects.all())

    class Meta:
        fields = '__all__'
        model = Follow
        validators = [
            UniqueTogetherValidator(
                queryset=Follow.objects.all(),
                fields=['user', 'following'],
                message='Подписка выполнена.'
            )
        ]
    
    def validate(self, data):
        user = data['user']
        current_follow = data['following']
        if user == current_follow:
            raise serializers.ValidationError(
                ['Подписка на себя невозможна'])
        return data

При первоначальной подписке ошибка "Not found" происходит из-за того, что в строке following = CustomUser.objects.filter(pk=id) вместо одного пользователя я получал список пользователей (из одной записи) и потом этот список использовал в строке follow = get_object_or_404(Follow, user=user, following=following) из-за чего и вернулась 404 ошибка.

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