DRF的序列化组件的使用
1.导入drf的序列化组件
from rest_framework import serializers
2.写一个类继承它(类名随意)(可以指定返回的数据条数)
class BookSerializer(Serializer):
name=serializers.CharField()
//source可以指定返回的key
book_price = serializers.CharField(source='price')
3.若要序列化的表有关联多个表
1)方式一:
fields = 可以是列表表示只要列表中的字段,fields='all'表示全部
exclude=['publish','authors'],表示去掉指定字段
fields和exclude不能连用
class AuthorsDRF(serializers.Serializer):
author_id = serializers.IntegerField(source='id')
author_name = serializers.CharField(source='name')
author_sex = serializers.CharField(source='sex')
addr = serializers.CharField()
class BooksDRF(serializers.ModelSerializer):
book_name = serializers.CharField(source='name')
class Meta:
model = Book
fields = ['book_name', 'price', 'author']
#想要得到author表的详细信息
author = serializers.SerializerMethodField()
def get_author(self, book):
aut = book.author.all()
aut_msg = AuthorsDRF(aut, many=True)
return aut_msg.data
2)方式二:
depth=1表示深度是一,表示可以得到深度是一的表的详细信息
class BooksDRF(serializers.ModelSerializer):
book_name = serializers.CharField(source='name')
class Meta:
model = Book
fields = '__all__'
depth=1
4.在视图函数中使用
1.many=Ture表示传入多条many=False表示传入一条
2.注意在序列化完成以后必须调用方法.data才能得序列化后的数据
class Books(APIView):
def get(self, request):
books = models.Book.objects.all()
books_res = BooksDRFtest(books, many=True)
authors = models.Author.objects.all()
authors_res = AuthorsDRF(instance=authors,many=True)
response = {'status':200,'msg':'查询成功!','books':books_res.data,'authors':authors_res.data}
return JsonResponse(response, safe=False)
def put(self, request, id):
models.Book.objects.filter(id=id).update(name=request.data.get('name'))
book = models.Book.objects.filter(id=id).first()
book_res = BooksDRF(book, many=False)
return JsonResponse(book_res.data, safe=False)
def delete(self, request, id):
models.Book.objects.filter(id=id).delete()
return JsonResponse(' ', safe=False)
def post(self,request):
response = {'status':201,'msg':None}
book_name = request.data.get('book_name')
book_price= request.data.get('book_price')
pub_time = request.data.get('pub_time')
publish_id = request.data.get('publish_id')
author_id = request.data.get('author_id')
book = models.Book.objects.create(name=book_name,price=book_price,pub_time=pub_time,publish_id=publish_id)
book.author.add(*author_id)
book_res = BooksDRF(book,many=False)
response['obj'] = book_res.data
return JsonResponse(response,safe=False)