我有两个序列化器:PostSerializer和PostImageSerializer,它们都继承了 DRF ModelSerializer。PostImage 模型通过 related_name='photos' 与 Post 相关联。
由于我希望序列化程序执行update,PostSerializer 覆盖 ModelSerializer 中的 update() 方法,如官方 DRF 文档中所述。
class PostSerializer(serializers.ModelSerializer):
photos = PostImageSerializer(many=True)
class Meta:
model = Post
fields = ('title', 'content')
def update(self, instance, validated_data):
photos_data = validated_data.pop('photos')
for photo in photos_data:
PostImage.objects.create(post=instance, image=photo)
return super(PostSerializer, self).update(instance, validated_data)
class PostImageSerializer(serializer.ModelSerializer):
class Meta:
model = PostImage
fields = ('image', 'post')
Run Code Online (Sandbox Code Playgroud)
我还定义了一个继承ModelViewSet 的 ViewSet。
class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
Run Code Online (Sandbox Code Playgroud)
最后 PostViewSet …