У меня есть вложенный сериализатор в Django Rest Framework:
class AlbumSerializer(serializers.Serializer):
title = serializers.CharField()
tracks = TrackSerializer(many=True)
def update(self, instance, validated_data):
instance.title = validated_data.get(
'title', instance.title)
instance.save()
return instance
Когда я получаю, я вижу:
{
"title": "some title",
"tracks": [
{
"name": "some track"
}
]
}
Когда я использую обновление, я возвращаю обновленный альбом, минус треки - я бы хотел видеть треки в ответе 201. ПРИМЕЧАНИЕ : Я не хочу, чтобы вложенные элементы были доступны для записи, я просто хочу иметь возможность обновить родительский элемент и видеть существующие вложенные элементы в ответе.
ОБНОВЛЕНИЕ:
Вот мой взгляд. ПРИМЕЧАНИЕ: Для каждого пользователя будет только один альбом, поэтому некоторые из моего кода просмотра проверяют, существует ли пользователь, и соответственно создают или обновляют:
class AlbumView(APIView):
serializer_class = AlbumSerializer
def get_object(self, user):
try:
return Album.objects.get(user=user)
except Album.DoesNotExist:
return False
def get(self, request, format=None):
req = self.get_object(user=request.user)
if req:
serializer = AlbumSerializer(req)
return Response(serializer.data)
return Response("No album found")
def post(self, request, format=None):
req = self.get_object(user=request.user)
serializer = AlbumSerializer(data=request.data)
if serializer.is_valid(raise_exception=ValueError):
if req:
serializer.update(instance=req, validated_data=request.data)
else:
serializer.create(user=request.user, validated_data=request.data)
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)