from rest_framework import serializers



class AuthorSerializer(serializers.Serializer):

nid = serializers.CharField()

name = serializers.CharField()

age = serializers.CharField()



# class BookSerializer(serializers.Serializer):

# # 可以用source修改别名

# xx = serializers.CharField(source='name')

# price = serializers.CharField()

# sb = serializers.CharField(source='publish.city')

# test = serializers.CharField(source='publish.test')

# publish_id = serializers.CharField()

# # SerializerMethodField,可以指定一个方法

# # publish=serializers.SerializerMethodField()

# # # 方法名:叫get_字段名,要传参数,参数是:当前book对象

# # def get_publish(self,obj):

# # # obj 是当前book对象0

# # dic={'name':obj.publish.name,'email':obj.publish.email}

# # return dic

# authors=serializers.SerializerMethodField()

# # def get_authors(self,book):

# # #拿到这本书的所有作者

# # aus=book.authors.all()

# # # 拼出一个列表,列表中套字典,每个字典是一个作者

# # ll=[]

# # for a in aus:

# # ll.append({'name':a.name,'age':a.age})

# # return ll

# def get_authors(self,book):

# #拿到这本书的所有作者

# aus=book.authors.all()

# # 可以继续用序列化类,来处理

# auth_ser=AuthorSerializer(aus,many=True)

# return auth_ser.data

from ap01.models import Book



# class BookSerializer(serializers.ModelSerializer):

# # 必须写一个内部类,名字叫Meta

# class Meta:

# model = Book

# fields = '__all__'

# # 重写属性

# publish = serializers.CharField(source='publish.name')

# authors = serializers.SerializerMethodField()

# def get_authors(self, book):

# # 拿到这本书的所有作者

# aus = book.authors.all()

# # 可以继续用序列化类,来处理

# auth_ser = AuthorSerializer(aus, many=True)

# return auth_ser.data



class BookSerializer(serializers.ModelSerializer):

# 必须写一个内部类,名字叫Meta

class Meta:

model = Book

# fields = '__all__'

# 指定只取这两个字段

fields = ['nid','name']

# 去掉指定的字段

# exclude=['publish','authors']

# fields,跟exclude不能连用

# 指定深度(官方建议小于10,我给你的建议小于3)

# depth = 2