使用source,字段參數(shù),可以修改序列化字段名字
成都創(chuàng)新互聯(lián)-云計算及IDC服務(wù)提供商,涵蓋公有云、IDC機房租用、內(nèi)蒙古服務(wù)器托管、等保安全、私有云建設(shè)等企業(yè)級互聯(lián)網(wǎng)基礎(chǔ)服務(wù),服務(wù)電話:18982081108
原本序列化器中字段名,必須和表中的字段名一樣,不一樣會報錯
我們可以通過source字段來改變序列化器中的字段名,使得前端在展示的時候也修改一下字段名??!
source也可以做跨表查詢,通過外鍵字段,表名點外鍵出去的字段名字
class BookSerializer(serializers.Serializer):
publish=serializers.CharField(source='publish.email')
# 等價于book.publish.email 查到當前書對象的文鍵出版社對象然后拿到該出版社對象的郵箱
source指定的可以是字段,也可以是方法,用于重命名
小坑:不能夠指定它原本的名字
方式一:在【序列化類】中寫SerializerMethodField
必須配合一個方法(get_字段名,需要傳一個字段名接受一個參數(shù)),方法返回什么,這個字段就是什么
class BookSerializer(serializers.Serializer):
name = serializers.CharField(max_length=8, min_length=3)
price = serializers.IntegerField(max_value=300, min_value=10)
# publish = serializers.CharField(max_length=8, min_length=3)
# publish要序列化成{name:北京出版社,city:北京,email:2@qq.com}
# 方式一:SerializerMethodField必須配合一個方法(get_字段名,需要傳一個字段名接受一個參數(shù)),方法返回什么,這個字段就是什么
publish = serializers.SerializerMethodField()
def get_publish(self, obj):
# obj 就是當前序列化的對象
return {'name': obj.publish.name, 'city': obj.publish.city, 'email': obj.publish.email} # 基于對象的跨表查詢
# 練習一
author = serializers.SerializerMethodField()
def get_author(self, obj):
res_list = []
for author in obj.authors.all():
res_list.append({'id': author.id, 'name': author.name, 'age': author.age})
return res_list
# 框架的源碼中,大量使用斷言
# assert :斷言,作用的判斷,斷定一個變量必須是xx,如果不是就報錯
# 你的土鱉寫法
# name = 'lqz1'
# if not name == 'lqz':
# raise Exception('name不等于lqz')
#
# print('程序執(zhí)行完了')
# assert的斷言寫法
name = 'lqz1'
assert name == 'lqz', 'name不等于lqz'
print('程序執(zhí)行完了')
當前標題:序列化類高級用法之source、SerializerMethodField和斷言assert
網(wǎng)站鏈接:http://redsoil1982.com.cn/article32/dsogcsc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、定制開發(fā)、網(wǎng)站收錄、云服務(wù)器、微信小程序、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)