日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

django restframework serializer 增加自定義字段操作

瀏覽:345日期:2024-09-26 11:04:12

在使用django restframework serializer 序列化在django中定義的model時(shí),有時(shí)候我們需要額外在serializer中增加一些model中沒(méi)有的字段。有兩種方法實(shí)現(xiàn)這個(gè)目的。

假設(shè)現(xiàn)在有一個(gè)Animal模型,其中有name, type, country字段,country為外鍵。我們?cè)谛蛄谢疉nimal時(shí),需要額外增加外鍵country的area信息。

方法一修改數(shù)據(jù)庫(kù),利用model 這里就不多解釋,主要來(lái)說(shuō)第二種,不修改django的model,直接使用SerializerMethodField(method_name=None)字段。

class AnimalSerializer(serializers.ModelSerializer): country_area = serializers.SerializerMethodField() class Meta: model = Animal fields = (’id’, ’name’, ’type’,’country’,’country_area’) def get_country_area(self, obj): return obj.country.area

SerializerMethodFiel是一個(gè)read-only字段

當(dāng)不指定其method_name時(shí),默認(rèn)為get_field_name

如果使用ModelSerializer并指定字段時(shí),要包含此時(shí)定義的字段

補(bǔ)充知識(shí):django restframework Serializer field

SerializerMethodField

這是一個(gè)只讀字段。它通過(guò)調(diào)用它所連接的序列化類的方法來(lái)獲得它的值。它可用于將任何類型的數(shù)據(jù)添加到對(duì)象的序列化表示中。

簽名: SerializerMethodField(method_name=None)

method_name - 要調(diào)用序列化對(duì)象的方法的名稱。如果不包含,則默認(rèn)為 get_<field_name>.

由 method_name 參數(shù)引用的序列化方法應(yīng)該接受一個(gè)參數(shù)(除了 self),這是要序列化的對(duì)象。它應(yīng)該返回你想要包含在對(duì)象的序列化表示中的任何內(nèi)容。例如:

場(chǎng)景介紹:一個(gè)用戶往往對(duì)應(yīng)多個(gè)角色,而角色字段并不在UserProfile表中,這就需要我們新增角色字段到user序列化中

from .models import UserProfilefrom .models import UserRoleclass UserProfileSerializer(serializers.ModelSerializer): ''' show list serializer ''' role = serializers.SerializerMethodField() class Meta: model = UserProfile # fields = '__all__' fields = ['id', 'username','role', 'account', 'really_name', 'department', 'tel_phone', 'create_time', 'email', 'last_time', 'creator'] def get_role(self,obj): user_id = obj.id roles = [i.role.name for i in UserRole.objects.filter(user_id=user_id)] roles = ','.join(roles) return roles

相反的場(chǎng)景:我們提交的表單數(shù)據(jù)存在于多表中(因?yàn)楸碇泻卸鄬?duì)多字段),如何驗(yàn)證所有字段,并保存完整的數(shù)據(jù)到各表中。

剛開(kāi)始的思路在ModelSerializer中新增未定義字段,然后發(fā)現(xiàn)這并不可行。我也犯了SerializerMethodField的錯(cuò)誤,但隨后去讀了serializer的源碼,以及了解serializer的順序,就知道SerializerMethodField僅用于list方法。

問(wèn)題的突破點(diǎn)到底在哪里呢,在drf serializer 官方文檔中就有一個(gè)知識(shí)點(diǎn),serializer.save(**kwargs),kwargs數(shù)據(jù)被綁定在serializer.validated_data對(duì)象上,當(dāng)create或update的時(shí)候就會(huì)被添加進(jìn)數(shù)據(jù)庫(kù),相當(dāng)于validated_data.update(kwargs)

實(shí)際源碼不是這樣子,但也就是這么個(gè)意思。

重寫Serializer create,update方法

from rest_framework.utils import model_meta def create(self, validated_data): field= validated_data.pop(’field_name’) validated_data = validated_data instance = Model.objects.create(**validated_data) # ...外鍵表的操作 return instance def update(self, instance, validated_data): field= validated_data.pop(’field_name’) info = model_meta.get_field_info(instance) for attr, value in validated_data.items(): if attr in info.relations and info.relations[attr].to_many: field = getattr(instance, attr) field.set(value) else: setattr(instance, attr, value) instance.save() # ... return instance

以上這篇django restframework serializer 增加自定義字段操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Django
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产91在线精品| 国产成人精品一区二区免费看京| 亚洲欧洲高清| 国产精品66| 精品国产一区二区三区2021| 国产精品最新自拍| 噜噜噜久久亚洲精品国产品小说| 韩国三级一区| 色吊丝一区二区| 中文久久精品| 日韩黄色在线观看| 精品国产一区二区三区噜噜噜| 欧美精品97| 国产99久久| 中文字幕日本一区| 国产精品v日韩精品v欧美精品网站 | 亚州精品视频| 国产欧美日韩一级| 成人在线免费观看网站| 国产在线不卡| 日韩精品高清不卡| 亚洲不卡系列| 奇米亚洲欧美| 91精品亚洲| 欧美一区成人| 欧美日韩在线网站| 国产欧美成人| 久久都是精品| 精品亚洲精品| 免费精品视频在线| 亚洲精品**中文毛片| 日本亚洲最大的色成网站www| 日韩欧美国产精品综合嫩v| 亚洲最新av| 国产一区二区三区自拍| 国产精品mm| 日韩在线麻豆| 欧美午夜精彩| 激情中国色综合| 911亚洲精品| 欧美综合二区| 日韩天堂av| 午夜欧美巨大性欧美巨大| 日韩精品高清不卡| 国产午夜精品一区二区三区欧美| 中文字幕在线免费观看视频| 国产日韩欧美一区| 欧美一区激情| 欧美亚洲自偷自偷| 青草av.久久免费一区| 日韩中文一区二区| 亚洲专区视频| 中文字幕乱码亚洲无线精品一区| 中文日韩欧美| 视频一区二区欧美| 美女久久一区| 免费成人在线影院| 少妇精品在线| 亚洲精品乱码| 亚洲精品观看| 91精品国产自产精品男人的天堂| 91成人精品在线| 国产欧美日韩精品高清二区综合区| 最新国产精品视频| 在线精品福利| 奇米狠狠一区二区三区| 国产欧美自拍| 国产一区二区三区国产精品| 国产一区二区三区亚洲综合| 中文字幕一区久| 今天的高清视频免费播放成人| 午夜电影亚洲| 亚洲日本欧美| 久久不见久久见免费视频7 | 国产精品a级| 都市激情国产精品| 91精品精品| 亚洲久久视频| 精品日本视频| 亚洲一卡久久| 欧美日韩伊人| 日韩av免费| 亚洲精品在线a| sm久久捆绑调教精品一区| 久久中文亚洲字幕| 亚洲色图网站| 精品一区二区三区在线观看视频| 日韩中文在线播放| 日本电影久久久| 私拍精品福利视频在线一区| 视频一区二区国产| 高清日韩中文字幕| 亚洲影视一区| 久久中文字幕二区| 精品视频黄色| 色8久久久久| 99成人在线视频| 国产精品毛片aⅴ一区二区三区| 鲁鲁在线中文| 国产精品日本一区二区三区在线| 亚洲伦乱视频| 国产精品毛片视频| 亚洲资源网站| 日韩午夜av| 精品欧美一区二区三区在线观看| 国产精品久久久一区二区| 免费看的黄色欧美网站| 日韩免费在线| 国产精品黑丝在线播放| 久久狠狠久久| 日韩一区中文| 亚洲精品在线国产| 亚洲综合精品四区| 婷婷综合亚洲| 蜜臀91精品国产高清在线观看| 国产欧美日韩视频在线| 亚洲精品免费观看| 亚洲日本免费电影| 亚洲乱码一区| 日韩中文字幕在线一区| 亚洲欧美网站在线观看| 免费观看在线综合色| 亚洲一区二区三区中文字幕在线观看| 99久久久久国产精品| 99成人超碰| 亚洲一区二区三区四区五区午夜| 国产在线不卡| 久久av一区二区三区| 亚洲欧洲国产精品一区| 日本欧美在线| 国产欧美高清视频在线| 国产情侣久久| 国产另类在线| 日韩免费看片| 亚洲免费福利| 久久久夜精品| 91精品国产自产在线观看永久∴| 日韩三区免费| 丁香婷婷久久| 欧美亚洲三级| 国产精品99久久免费| 亚洲欧美成人综合| 欧美aa在线观看| 日韩欧美一区二区三区免费观看| 99视频精品全部免费在线视频| 欧美天堂视频| 精品丝袜久久| 久久久夜夜夜| 一区二区三区国产在线| 久久久久久免费视频| 国产成人精品免费视| 久久精品国内一区二区三区水蜜桃| 国产在线成人| 日本aⅴ亚洲精品中文乱码| 国产a亚洲精品| 免费欧美日韩| 樱桃视频成人在线观看| 激情亚洲影院在线观看| 宅男噜噜噜66国产日韩在线观看| 亚州精品视频| 五月激情久久| 欧美二区视频| 亚洲深夜视频| 午夜亚洲一区| 国产免费成人| 欧美激情三区| 亚洲网站视频| 国产精久久久| 爽好多水快深点欧美视频| 久久亚洲黄色| 四虎精品永久免费| 99精品视频在线| 国产欧美日韩一区二区三区在线| 一区二区自拍| 天堂中文在线播放| 青青草91视频| 国产精品字幕| 久久在线91| 日本欧美一区二区在线观看| 亚洲精品一二三区区别| 麻豆91小视频| 日韩av一级片| 亚洲影视一区二区三区| 久久久久观看| 亚洲综合婷婷| 国产福利资源一区| 中文字幕视频精品一区二区三区| 国产乱码午夜在线视频| 国产麻豆精品| 日韩中文字幕无砖| 亚洲综合婷婷| 日韩欧美1区| 91视频精品| 免费在线播放第一区高清av| 蜜臀精品一区二区三区在线观看| 久久视频一区| 91精品一区二区三区综合在线爱| 日产午夜精品一线二线三线| 国产成人精品一区二区三区视频 | 亚洲二区精品|