日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DAY97 - Rest Framework(二)- 序列化组件之Serializer和ModelSerializer

發(fā)布時(shí)間:2024/8/26 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。