DRF 序列化组件

自定义 序列化 组件

from rest_framework import serializers
from app01 import models

class BookSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    title = serializers.CharField(required=False, allow_blank=True, max_length=100)
    ############    一对一
    # 这是一个 一对多字段
    # 这个名字 一定要和 orm 里的字段对上
    # 一对多  直接用 对象.publish.email  就出来   但是表里要有 显示的 def __str__(self)  , return self.name publish就显示name了

    publish = serializers.CharField(max_length=34,)

    # -------- 这样也可以   source="publish.name"  就是 直接向source 里取值 不会根据 变量名取值了

    publish = serializers.CharField(max_length=34,source="publish.name")

    ###########多对多
    authors=serializers.SerializerMethodField()

    def get_authors(self,obj):
        ret = []
        for i in obj.authors.all():
            ret.append(i.name)
        return ret

用法

更简洁的序列化类   serializers.ModelSerializer

只需要把 字段 按照列表的形式给 fields 就可以了

多对多 一对多  也是自己定义 

###########多对多
    authors=serializers.SerializerMethodField()

    def get_authors(self,obj):
        ret = []
        for i in obj.authors.all():
            ret.append(i.name)
        return ret

 



__all__    就是把所有的字段 显示出来



原文地址:https://www.cnblogs.com/jiangchunsheng/p/10087300.html