序列化器:serializers(django-rest-framework)
1.定义序列化器类
2.字段校验
3.从表数据操作(父表返回从表数据)
一、关联字段说明(例:父表模型类名:Project;从表模型类名:Interfaces。关联关系,一个或多个Interfaces对应一个Project)
1.可以定义PrimaryKeyRelatedField来获取关联表的外键值
2.如果通过父表获取从表数据,默认需要使用从表模型类名小写_set作为序列化器类中的关联字段名称
3.如果在定义模型类的外键字段时,指定了related_name参数(从表models.py文件中,在与父表的关系中添加),那么会把related_name参数名作为序列化器类中的关联字段名称
4.PrimaryKeyRelatedField字段,要么指定read_only=True,要么指定queryset参数,否则会报错
5.如果指定了read_only=True,那么该字段仅序列化输出
6.如果指定了queryset参数(关联表的查询集对象:queryset=Interfaces.objects.all()),用于对参数进行校验
7.如果关联字段有多个值,那么必须一案件many=True,一般父表获取从表数据时,关联字段需要指定
interfaces_set = serializers.PrimaryKeyRelatedField(label='项目所属接口id', help_text='项目所属接口id', read_only=True,many=True)
二。从表数据返回
1).从表数据返回方式一:PrimaryKeyRelatedField,返回从表id
inner = serializers.PrimaryKeyRelatedField(label='项目所属接口id', help_text='项目所属接口id', read_only=True, many=True)
2).从表数据返回方式二:StringRelatedField字段返回操作:返回从表__str__方法返回值
1.使用StringRelatedField字段,将关联字段模型类中的__str__方法的返回值作为该字段的值
2.StringRelatedField字段默认添加了read_only=True,该字段仅序列化输出
inner = serializers.StringRelatedField(many=True)
3).从表数据返回方式三:SlugRelateField字段返回某个从表的指定的字段值
1.使用SlugRelateField字段,将关联模型类中的某个字段,作为该字段的值(slug_field='查询字段值')
2.如果指定了read_only=True,那么该字段仅序列化输出
3.如果该字段需要进行反序列化输入,那么必须得指定queryset参数,同时关联字段必须有唯一约束(queryset=Interfaces.objects.all())
inner = serializers.SlugRelatedField(slug_field='name', many=True, queryset=Interfaces.objects.all())
4).从表数据返回方式四:返回从表自定义数据
1.需要重新定义一个从表的序列化类,并指定参数(详情见:InterfacesSerilizer类)
interfaces_set = InterfacesSerilizer(label='所属接口信息', help_text='所属接口信息', read_only=True, many=True)