这里是你的通告内容

春生

Be humble, communicate clearly, and respect others.

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__    就是把所有的字段 显示出来

 

 

 


 

posted @ 2018-12-08 12:38  PythonAV  阅读(227)  评论(0编辑  收藏  举报