AttributeError: 'list' object has no attribute 'format'
В моем проекте foodgram необходимо сделать возможность подписыватья на пользователей.
Проверяю через postman.
При переходе на http://127.0.0.1:8000/api/users/1/subscribe/ мне выдает ошибку AttributeError: 'list' object has no attribute 'format'
Буду рад любой помощи!
Python 3.7.9
Django 3.2.16
djangorestframework 3.12.4
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
following = get_object_or_404(CustomUser, pk=id)
serializer = FollowCreateSerializer(
data={'user': user.id, 'following': id},
context={'request': request})
print(serializer)
serializer.is_valid(raise_exception=True)
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)
serializer:
class FollowCreateSerializer(serializers.ModelSerializer):
""" Сериализатор создания объекта Подписки. """
user = serializers.PrimaryKeyRelatedField(
queryset=CustomUser.objects.all())
following = serializers.PrimaryKeyRelatedField(
queryset=CustomUser.objects.all())
class Meta:
fields = ('user', 'following')
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
Traceback:
Internal Server Error: /api/users/1/subscribe/
Traceback (most recent call last):
File "C:\Dev\foodgram-project-react\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Dev\foodgram-project-react\venv\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Dev\foodgram-project-react\venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "C:\Dev\foodgram-project-react\venv\lib\site-packages\rest_framework\viewsets.py", line 125, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Dev\foodgram-project-react\venv\lib\site-packages\rest_framework\views.py", line 509, in dispatch
response = self.handle_exception(exc)
File "C:\Dev\foodgram-project-react\venv\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
self.raise_uncaught_exception(exc)
File "C:\Dev\foodgram-project-react\venv\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
raise exc
File "C:\Dev\foodgram-project-react\venv\lib\site-packages\rest_framework\views.py", line 506, in dispatch
response = handler(request, *args, **kwargs)
File "C:\Dev\foodgram-project-react\backend\foodgram\recipes\views.py", line 48, in user_subscribe_add
serializer.is_valid(raise_exception=True)
File "C:\Dev\foodgram-project-react\venv\lib\site-packages\rest_framework\serializers.py", line 227, in is_valid
self._validated_data = self.run_validation(self.initial_data)
File "C:\Dev\foodgram-project-react\venv\lib\site-packages\rest_framework\serializers.py", line 428, in run_validation
self.run_validators(value)
File "C:\Dev\foodgram-project-react\venv\lib\site-packages\rest_framework\serializers.py", line 461, in run_validators
super().run_validators(to_validate)
File "C:\Dev\foodgram-project-react\venv\lib\site-packages\rest_framework\fields.py", line 591, in run_validators
validator(value, self)
File "C:\Dev\foodgram-project-react\venv\lib\site-packages\rest_framework\validators.py", line 159, in __call__
message = self.message.format(field_names=field_names)
AttributeError: 'list' object has no attribute 'format'
[17/Nov/2022 09:11:57] "POST /api/users/1/subscribe/ HTTP/1.1" 500 123997
В FollowCreateSerializer заменил
message=['Подписка выполнена.']
на:
message='Подписка выполнена.'