django-restframework之序列化类ModelSerializer

之前使用的serializers.Serializer
大多是都是自定义书写的
在插入数据以及修改数据的时候必须要手写create以及update方法

返回什么字段,也需要手写选择

于是,针对这些弊端,更完善的序列化类的封装ModelSerializer就出现了

下面贴一段代码,可以完全代替之前文章中的序列化类,
而且完全支持更新与新增
并且可以通过extra_kwargs定义新增时才会出现的字段
read_only定义只读字段,在新增时不出现

class BookSerialize(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ['title','price','publish','author','publish_company','author_list']
        extra_kwargs = {
            'publish':{'write_only':True},
            'author': {'write_only': True},
        }

    publish_company = serializers.CharField(read_only=True,source='publish.company',max_length=32)
    author_list = serializers.SerializerMethodField()

    def get_author_list(self,book_obj):
        author_list = list()
        for author in book_obj.author.all():
            author_list.append(author.name)
        return author_list

好了,序列化类的进阶分享就到这

你可能感兴趣的:(django,mixins,rest,framework,ModelSerializer)