真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

序列化類(lèi)高級(jí)用法之source、SerializerMethodField和斷言assert

序列化類(lèi)高級(jí)用法之source

使用source,字段參數(shù),可以修改序列化字段名字

成都創(chuàng)新互聯(lián)-云計(jì)算及IDC服務(wù)提供商,涵蓋公有云、IDC機(jī)房租用、內(nèi)蒙古服務(wù)器托管、等保安全、私有云建設(shè)等企業(yè)級(jí)互聯(lián)網(wǎng)基礎(chǔ)服務(wù),服務(wù)電話(huà):18982081108

原本序列化器中字段名,必須和表中的字段名一樣,不一樣會(huì)報(bào)錯(cuò)

我們可以通過(guò)source字段來(lái)改變序列化器中的字段名,使得前端在展示的時(shí)候也修改一下字段名??!

source也可以做跨表查詢(xún),通過(guò)外鍵字段,表名點(diǎn)外鍵出去的字段名字

class BookSerializer(serializers.Serializer):
	publish=serializers.CharField(source='publish.email')
# 等價(jià)于book.publish.email 查到當(dāng)前書(shū)對(duì)象的文鍵出版社對(duì)象然后拿到該出版社對(duì)象的郵箱

source指定的可以是字段,也可以是方法,用于重命名

小坑:不能夠指定它原本的名字

序列化類(lèi)高級(jí)用法之定制序列化字段的倆種方式

方式一:在【序列化類(lèi)】中寫(xiě)SerializerMethodField

必須配合一個(gè)方法(get_字段名,需要傳一個(gè)字段名接受一個(gè)參數(shù)),方法返回什么,這個(gè)字段就是什么

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必須配合一個(gè)方法(get_字段名,需要傳一個(gè)字段名接受一個(gè)參數(shù)),方法返回什么,這個(gè)字段就是什么
    publish = serializers.SerializerMethodField()

    def get_publish(self, obj):
        # obj 就是當(dāng)前序列化的對(duì)象
        return {'name': obj.publish.name, 'city': obj.publish.city, 'email': obj.publish.email}  # 基于對(duì)象的跨表查詢(xún)

    # 練習(xí)一
    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斷言

# 框架的源碼中,大量使用斷言

# assert :斷言,作用的判斷,斷定一個(gè)變量必須是xx,如果不是就報(bào)錯(cuò)

# 你的土鱉寫(xiě)法
# name = 'lqz1'
# if not name == 'lqz':
#     raise Exception('name不等于lqz')
#
# print('程序執(zhí)行完了')

# assert的斷言寫(xiě)法
name = 'lqz1'
assert name == 'lqz', 'name不等于lqz'
print('程序執(zhí)行完了')


本文名稱(chēng):序列化類(lèi)高級(jí)用法之source、SerializerMethodField和斷言assert
分享路徑:http://weahome.cn/article/dsogcsc.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部