Как правильно сохранить вложенный объект в пост-запросе?
Я пытаюсь работать с запросом post, в котором я сначала сохраняю объект Tag, который затем становится полем tag объекта Tagging. Однако, какие бы комбинации я не пробовал, несмотря на то, что метод Tag Post работает, когда я передаю json-объект следующим образом:
{
"user_id": 1,
"gameround_id": 2015594866,
"resource_id": 2975,
"tag": {
"name": "TESTTAGGGG2222",
"language": "en"
},
"score": 0,
"origin": ""
}
Я продолжаю получать это сообщение:
{
"name": [
"This field is required."
],
"language": [
"This field is required."
]
}
Однако, когда я передаю тег, он работает.
Вот соответствующая часть из метода поста:
if tag_serializer.is_valid(raise_exception=True):
tag_serializer.save(tag=request.data)
if tagging_serializer.is_valid(raise_exception=True):
tagging_serializer.save(tagging=request.data, tag=tag_serializer.data)
return Response({"status": "success", "data": tagging_serializer.data},
status=status.HTTP_201_CREATED)
# else:
# return Response({"status": "success", "data": tag_serializer.data},status=status.HTTP_201_CREATED)
else:
return Response({"status": "error", "data": tag_serializer.errors},
status=status.HTTP_400_BAD_REQUEST)
Как мне правильно передать вложенный объект в метод post, чтобы больше не получать эту ошибку?
В своем посте метод, вы сделали
tag_serializer = TagSerializer(data=request.data)
if tag_serializer.is_valid(raise_exception=True):
# the rest of the code
это означает, что ваши данные будут переданы в TagSerializer, поэтому DRF проверит, есть ли поля для этого сериализатора в теле запроса или нет, и они не предоставлены, потому что эти данные не принадлежат этому сериализатору, они принадлежат TaggingSerializer, поэтому это даст вам ошибку This field is required
Итак, вам нужно отправить данные запроса только на TaggingSerializer, попробуйте это и посмотрим, что произойдет, и я предлагаю использовать serializers.Serializer вместо serializers.ModelSerializer для лучшей производительности