Невозможно перенести валидацию из представления в сериализатор
Мне нужно перенести валидацию из views.py в serializators.py. Как я могу это сделать?
Валидация должна проверить:
- пользователь не может следить за собой
- пользователь не может следить за автором, за которым он уже следит
У меня есть 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):
, но он не работает.