drf高级用法之——ModelSerializer的使用

1.书写序列化类,继承ModelSerializer

from rest_framework import serializers

class BookSerializer(serializers.ModelSerializer):

 

2.在序列化类中在写一个类(固定写法):

class Meta:
    model=表模型
    fields=[] # 要序列化的字段

 

3.在序列化类中书写字段:

class BookSerialzier(serializers.ModelSerializer):
    # 第一个好处,不用一个个写字段了,把表模型中得字段映射过来
    class Meta:
        model = Book  # 指定表模型
        # fields='__all__'  # 把表模型中所有字段都映射过来
        fields = ['name', 'price', 'publish', 'authors']  # 自定制的字段,一定要在这里注册一下

 

4.同样能够自定制字段(需要在fields中注册。注意:不要写在class Meta类下面去了!):

# 自定制字段:publish_detail  author_list 写法有两种,跟之前一模一样
publish_detail = serializers.DictField(read_only=True)
author_list = serializers.ListField(read_only=True)

 

5.class Meta: 有个extra_kwargs,为某个字段定制字段参数

extra_kwargs = {
        'name': {'max_length': 10, 'required': True},
        'publish': {'write_only': True},
        'authors': {'write_only': True}
        }

 

6.局部钩子,全局钩子,完全一致

7.大部分请情况下,不需要重写 create和 update了

 

整体代码如下:

class BookSerialzier(serializers.ModelSerializer):  
    class Meta:
        model = Book  
        fields = ['name', 'price', 'publish_detail', 'author_list', 'publish', 'authors'] 
        extra_kwargs = {
            'name': {'max_length': 10, 'required': True},
            'publish': {'write_only': True},
            'authors': {'write_only': True}
        }

 
    publish_detail = serializers.DictField(read_only=True)
    author_list = serializers.ListField(read_only=True)

 

posted @ 2023-11-21 21:35  wellplayed  阅读(42)  评论(0编辑  收藏  举报