模型类序列化器-ModelSerializer
模型类序列化器
1 简介
drf提供了模型类序列化器:Model Serializer。作用就是简化对应django模型类的序列化器的定义。
ModelsSerializer与常规的Serializer相同,但提供了:
- 基于模型类自动生成一系列字段
- 基于模型类自动为Serializer生成Validators,比如字段唯一的校验器
- 包含默认的create()和update()实现。
2 定义
比如我们创建一个DepartmentSerializer2
from rest_framework import serializers
class DepartmentSerializer2(serializers.ModelSerializer):
class Meta:
model=Department # 指明参照的是哪个模型类
fields = '__all__' # 包含模型类的所有字段
fields = ('name','id') # 只序列化指定的字段
exclude = ('name',) # 跟fields不能都写,写谁就排除谁
read_only_fields = ('price',) # 仅用于序列化输出,在反序列化时不会进行校验和修改。
extra_kwargs = {
# name=serializers.CharField(max_length=12,min_length=4)
'price':{'write_only':True}
}
3 用法
'''
source 的三种用法:
1. 可以改字段名字 xxx=serializers.CharField(source='name')
2. 可以跨表 publish=serializers.CharField(source='publish.email')
3. 可以执行方法 pub_date = serializers.CharField(source='test'),test是Book表模型的方法
'''
SerializerMethodField()使用,主要用于显示返回多个值
1. 需要配套放大,get_字段名,返回值就是要显示的东西
authors = serializer.SerializerMethodField()
def get_authors(self, instance):
authors=instance.authors.all().values('name','age')
return authors
modelsserializer里写局部钩子和全局钩子是和serializer一毛一样的。