序列化:
model --> serializers(字段定义) --> to_representation -->views
反序列化:
web --> querydict -->to_internal_value --> serializers(字段定义) --> 自定义字段验证(validate_字段) --> 自定义验证(validate,基于整个数据对象的验证) --> create
image.png
如果是只读的接口可以使用SerializerMethodField
idc = serializers.SerializerMethodField()
# 这种方式,在serializers(字段定义) 之前做数据操作
def get_idc(self,obj):
return {
"id": obj.id,
"name": obj.name
}
如果是需要反序列化写入的必须使用PrimaryKeyRelatedField
idc = serializers.PrimaryKeyRelatedField(many=False,queryset=Idc.objects.all())
def to_representation(self, instance):
"""
序列化修改输出字段
"""
idc_obj = instance.idc
ret = super(CabinetSerializer,self).to_representation(instance)
ret["idc"] = {
"id":idc_obj.id,
"name":idc_obj.name
}
return ret
def to_internal_value(self, data):
"""
反序列化第一步,拿到的是提交过来的原始数据,QueryDict => request.GET,request.POST
"""
print(data)
return super(CabinetSerializer,self).to_internal_value(data)