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)