rest_framework04:ModelSerializer/Serializer高级用法
生活随笔
收集整理的這篇文章主要介紹了
rest_framework04:ModelSerializer/Serializer高级用法
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
ModelSerializer
1.減小序列化類(lèi)代碼
2.不需要重寫(xiě)update,create
ser.py
class BookModelSerializer(serializers.ModelSerializer):class Meta:model=Bookfields='__all__' #序列化全部字段# fields=('name','price') # 序列化指定字段# exclude=('name',) # 與fields 不能共用 用于排除某個(gè)字段views.py 書(shū)寫(xiě)格式與原來(lái)一樣,只修改方法名字。
class BooksView2(APIView):def get(self, request):response=MyResponse()books = Book.objects.all()book_ser = BookModelSerializer(books, many=True) # 序列化多條。 如果一條,不需要寫(xiě)response.data = book_ser.datareturn Response(response.get_dic)def post(self, request):response=MyResponse()# 新增沒(méi)有instance,只有databook_ser = BookModelSerializer(data=request.data)# 如果沒(méi)有data=,會(huì)報(bào)錯(cuò)。第一個(gè)參數(shù)是instance# book_ser = BookSerializer(request.data)# 校驗(yàn)字段if book_ser.is_valid():book_ser.save()response.data = book_ser.dataelse:response.status = 102response.msg = '新增數(shù)據(jù)校驗(yàn)失敗'response.data = book_ser.datareturn Response(response.get_dic)高級(jí)用法
source
1.可以該字段名
title_name=serializers.CharField(source='title')2.可以用"."進(jìn)行跨表
# 調(diào)用 book.publish,直接.publish,所以需要Publish里定義 __str__方法 publish=serializers.CharField()# 可以理解source 隱藏book.字段。publish = serializers.CharField(source='publish.email')3.可以執(zhí)行方法
# test為book類(lèi)里定義的方法 title=serializers.CharField(source='test')SerializerMethodField()
需要配套方法,方法名叫 get_字段名 返回值就是要顯示的東西
# 需要配套方法,方法名叫 get_字段名 返回值就是要顯示的東西authors=serializers.SerializerMethodField()def get_authors(self,instance):# book 對(duì)象authors=instance.authors.all()ll=[]for author in authors:ll.append({'name':author.name,'age':author.age})return ll總結(jié)
以上是生活随笔為你收集整理的rest_framework04:ModelSerializer/Serializer高级用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: rest_framework03:查询所
- 下一篇: rest_framework05:Gen