У меня есть a ModelViewSet
в Django REST Framework, который дает мне возможность делать POST и GET через следующий адрес:
api/v1/users
Эти пользователи имеют обратное отношение к таблице комментариев, и я хотел бы иметь доступ к этим комментариям через URL-адрес:
api/v1/users/<username>/comments
Я смог сделать это, установив пользовательский @detail_route
, переопределив queryset
и и serializer_class
, но он работает только для запросов GET. Если я попытаюсь выполнить POST новый комментарий через раздел администрирования REST Framework, я получаю сообщение об ошибке, указывающее, что объект "ListSerializer" не является итерируемым "
Здесь мой код:
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserFlat
lookup_field = 'username'
@detail_route(methods=['post','get'])
def comment(self, request, **kwargs):
user = self.get_object()
self.queryset = Comment.objects.filter(recipient=user.id)
self.serializer_class = CommentFlat
serializer = CommentFlat(instance=self.queryset, many=True)
return Response(serializer.data)
Новый комментарий должен содержать следующие параметры:
comment.author, comment.message, comment.recipient
Я могу ввести все эти поля в панели администратора и попытаться создать почтовый запрос, но он не сработает. В идеале мне нужно только заполнить комментарий .message и comment.author, а поле comment.recipient должно быть автопопулировано с user.id, которое получено в URL api/v1/users/<username>/comments
Кто-нибудь знает, почему мой почтовый запрос не завершается, и как я могу автозаполнять это поле?