DAY97 - Rest Framework(二)- 序列化组件之Serializer和ModelSerializer
生活随笔
收集整理的這篇文章主要介紹了
DAY97 - Rest Framework(二)- 序列化组件之Serializer和ModelSerializer
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、序列化組件之Serializer
from django.http import JsonResponse from rest_framework.views import APIView from rest_framework.request import Request from rest_framework.response import Response from rest_framework import serializers from app01 import modelsclass AuthorSerializers(serializers.Serializer):name = serializers.CharField(max_length=32)sex = serializers.CharField(max_length=32)class BookSerializers(serializers.Serializer):name = serializers.CharField(max_length=32)# source 可以指定字段,可以對字段重命名,不使用則前面的變量名必須和表一樣book_price = serializers.CharField(max_length=32, source='price')# 跨表查詢:查詢書本的出版社名# 方式一# 使用該方法必須重寫Publish表的__str__方法,不然顯示的是publish對象# def __str__(self):# return self.name# 顯示 "publish": "北京出版社"publish = serializers.CharField()# 方式二# source可以指定字段,那么可以使用基于對象的跨表查詢來引用publish.namepublish = serializers.CharField(source='publish.name')# 方式三# source不僅可以指定字段,還可以指定方法# def test(self):# return self.namepublish = serializers.CharField(source='publish.test')# 方法四# SerializerMethodField() 可以指定一個(gè)方法publish = serializers.SerializerMethodField()# 方法名必須是get_字段名,傳入?yún)?shù)obj:當(dāng)前的book對象def get_publish(self,obj):ll={'name':obj.publish.name,'email':obj.publish.email}return ll# 方法內(nèi)部也可以使用序列化組件authors = serializers.SerializerMethodField()def get_authors(self,obj):# 拿到這本書的所有作者authors = obj.authors.all()author_ret = AuthorSerializers(authors, many=True)return author_ret.dataclass Books(APIView):def get(self, request, *args, **kwargs):books = models.Book.objects.all()ret = BookSerializers(books, many=True)return JsonResponse(ret.data, safe=False)二、序列化組件之ModelSerializer
from django.http import JsonResponse from rest_framework.views import APIView from rest_framework.request import Request from rest_framework.response import Response from rest_framework import serializers from app01 import modelsclass AuthorSerializers(serializers.Serializer):name = serializers.CharField(max_length=32)sex = serializers.CharField(max_length=32)class BookSerializers(serializers.ModelSerializer):# Meta是必須寫的class Meta:# model:指定表model = models.Book# fields:顯示的字段# 全部顯示fields = '__all__'# 部分顯示# fields = ['name','price']# exclude:不顯示的字段,exclude和fields不能一塊使用# exclude=['publish','authors']# depth:跨表顯示的深度,不寫默認(rèn)為0,一般最好小于3# 比如depth=1,就顯示作者信息和出版社信息;depth=2,作者詳情表也顯示# depth=1# 但是這樣字段名就寫死了,像出版社和作者就只顯示ID# 可以重寫字段publish = serializers.CharField(source='publish.name')authors = serializers.SerializerMethodField()def get_authors(self, obj):# 拿到這本書的所有作者authors = obj.authors.all()author_ret = AuthorSerializers(authors, many=True)return author_ret.dataclass Books(APIView):def get(self, request, *args, **kwargs):books = models.Book.objects.all()ret = BookSerializers(books, many=True)return JsonResponse(ret.data, safe=False)轉(zhuǎn)載于:https://www.cnblogs.com/xvchengqi/p/10103468.html
總結(jié)
以上是生活随笔為你收集整理的DAY97 - Rest Framework(二)- 序列化组件之Serializer和ModelSerializer的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实验九 根据材料编程
- 下一篇: Golang——垃圾回收GC