django-rest-framework - 更新时返回嵌套序列化程序
问题描述
我在 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)
解决方案
推荐阅读
- gitlab-ci - gitlab ci yml 仅为发布候选分支运行特定阶段
- jupyter-notebook - 如何将我的 Jupyter 笔记本屏幕调整到以前的大小?
- java - 如何使用 Java 开关创建布尔条件?
- kubernetes - 如何在 k8s 中查看与特定服务帐户关联的权限/角色?
- python - 一开始就定义了一个全局函数,但是它需要的变量还没有定义
- python - 匹配列表中的短语
- python - Tkinter 模块在哪里包含函数?
- python - 所有可能的字符串
- node.js - 将不同文件中函数的返回结果分配给变量
- uwp - 如何在 ConsoleApp 中添加对 Windows.Foundation.FoundationContract 的引用以解析 IPropertySet 类型