成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

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

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

在使用django restframework serializer 序列化在django中定義的model時,有時候我們需要額外在serializer中增加一些model中沒有的字段。有兩種方法實現這個目的。

假設現在有一個Animal模型,其中有name, type, country字段,country為外鍵。我們在序列化Animal時,需要額外增加外鍵country的area信息。

方法一修改數據庫,利用model 這里就不多解釋,主要來說第二種,不修改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是一個read-only字段

當不指定其method_name時,默認為get_field_name

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

補充知識:django restframework Serializer field

SerializerMethodField

這是一個只讀字段。它通過調用它所連接的序列化類的方法來獲得它的值。它可用于將任何類型的數據添加到對象的序列化表示中。

簽名: SerializerMethodField(method_name=None)

method_name - 要調用序列化對象的方法的名稱。如果不包含,則默認為 get_<field_name>.

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

場景介紹:一個用戶往往對應多個角色,而角色字段并不在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

相反的場景:我們提交的表單數據存在于多表中(因為表中含有多對多字段),如何驗證所有字段,并保存完整的數據到各表中。

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

問題的突破點到底在哪里呢,在drf serializer 官方文檔中就有一個知識點,serializer.save(**kwargs),kwargs數據被綁定在serializer.validated_data對象上,當create或update的時候就會被添加進數據庫,相當于validated_data.update(kwargs)

實際源碼不是這樣子,但也就是這么個意思。

重寫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 增加自定義字段操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Django
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲欧美偷拍另类a∨色屁股| 99在线观看免费视频精品观看| 成人激情开心网| 亚洲综合激情| 亚洲精品你懂的| 激情久久综合| 国产精品色呦呦| 欧美三区美女| 久久久.com| 成人av集中营| 精品国产百合女同互慰| 国产成人在线观看免费网站| 91麻豆精品国产91久久久| 久久爱www久久做| 欧美这里有精品| 免费看欧美女人艹b| 在线观看亚洲精品视频| 日韩综合一区二区| 久久综合九九| 奇米影视在线99精品| 色网站国产精品| 老司机免费视频一区二区三区| 欧美在线免费观看亚洲| 奇米精品一区二区三区在线观看一| 一本色道久久综合精品竹菊| 日韩和欧美一区二区三区| 色狠狠一区二区三区香蕉| 日本中文字幕一区二区视频| 色婷婷激情综合| 另类欧美日韩国产在线| 欧美日韩免费观看一区三区| 国产一区不卡精品| 日韩欧美三级在线| av成人免费在线| 国产精品污污网站在线观看 | 欧美激情视频一区二区三区免费| 久久色在线视频| 欧美一区二视频在线免费观看| 国产人妖乱国产精品人妖| 欧美日本一区二区视频在线观看 | 久久综合九色欧美综合狠狠| 91免费看`日韩一区二区| 国产精品理伦片| 国产精品久久国产愉拍| 日韩电影在线免费看| 欧美巨大另类极品videosbest | 成人成人成人在线视频| 国产欧美一区二区三区沐欲| 亚洲午夜视频| 午夜精品在线视频一区| 欧美日韩一区二区三区在线 | 一本色道久久精品| 爽爽淫人综合网网站 | 国产精品青草久久| 国产精品久久久久久久免费软件 | 美女精品在线| 国内久久精品视频| 26uuu久久综合| 国产一区日韩一区| 亚洲国产视频a| 欧美伦理影视网| 97精品国产97久久久久久久久久久久| 国产精品视频在线看| 亚洲在线网站| 国产九色sp调教91| 国产精品美女久久久久av爽李琼| 老鸭窝亚洲一区二区三区| 国产在线播放一区三区四| 久久久精品黄色| 激情视频一区| 日韩影视精彩在线| 欧美tickling网站挠脚心| 亚洲成人资源| 六月婷婷色综合| 国产性天天综合网| 国产精品嫩草99av在线| 国内精品写真在线观看| 欧美激情一区二区三区四区| 亚洲欧美日韩国产一区| 国产精品香蕉一区二区三区| 国产精品久久久爽爽爽麻豆色哟哟 | 亚洲色图清纯唯美| 亚洲在线播放电影| 国产在线不卡一卡二卡三卡四卡| 国产亚洲一区二区三区在线观看| 亚洲乱亚洲高清| 激情综合五月婷婷| 中文字幕精品—区二区四季| 美女久久网站| 99久久婷婷国产综合精品电影| 亚洲黄色小视频| 欧美一区二区三区在| 亚洲免费成人| 国内精品国产成人| 亚洲欧美在线另类| 欧美久久久久久蜜桃| 伊人激情综合| 国产综合色视频| 亚洲精品中文在线影院| 日韩精品一区在线| 欧美一级久久| 女女同性精品视频| 免费看精品久久片| 中文字幕欧美一| 欧美一区二区三区视频| 香蕉免费一区二区三区在线观看| 成人毛片在线观看| 日韩av一区二| 国产精品萝li| 欧美人妖巨大在线| 国产乱码精品一区二区三区不卡| 成人伦理片在线| 蜜芽一区二区三区| 国产精品久久久久久久久免费相片 | 欧美日韩一级大片网址| 永久久久久久| 成人午夜电影网站| 亚洲二区在线视频| 国产三级精品三级在线专区| 欧美日韩免费观看一区三区| 国产精品日韩一区二区| 91在线观看免费视频| 久久精品国产精品亚洲综合| 亚洲一区二区三区小说| 亚洲国产成人午夜在线一区| 8v天堂国产在线一区二区| 香蕉久久国产| 欧美三级在线| 国产91精品在线观看| 男人的天堂久久精品| 亚洲免费在线播放| 国产午夜精品一区二区 | 亚洲精华国产欧美| 成人动漫av在线| 老司机精品视频一区二区三区| 亚洲品质自拍视频| 久久久精品免费网站| 日韩一级高清毛片| 欧美色网一区二区| 久久人人超碰| 99这里有精品| 欧美精品国产| 成人sese在线| 国产剧情一区在线| 蜜桃视频在线观看一区二区| 亚洲精品成人在线| 国产精品系列在线| 欧美精品一区二区三| 6080日韩午夜伦伦午夜伦| 91行情网站电视在线观看高清版| 国产精品久久一区二区三区| 欧美精品一区二区三区在线看午夜| 成人丝袜高跟foot| 国产精品一区免费视频| 久久激情五月激情| 男男视频亚洲欧美| 日本伊人精品一区二区三区观看方式| 一区二区三区波多野结衣在线观看| 国产片一区二区三区| 欧美变态tickle挠乳网站| 7777女厕盗摄久久久| 欧美三级电影一区| 欧美性色aⅴ视频一区日韩精品| 久久久青草婷婷精品综合日韩| 亚洲在线电影| 国产精品日韩二区| 99视频精品免费观看| 国产综合精品一区| 国产综合精品| 亚洲一级影院| 黄色精品网站| 影音先锋亚洲电影| 亚洲国产综合在线看不卡| 欧美日韩久久| 黄色av日韩| 亚洲先锋成人| 亚洲三级观看| 亚洲尤物精选| 噜噜噜91成人网| 一本色道久久加勒比精品| 色先锋资源久久综合| 欧美亚洲动漫精品| 91麻豆精品国产91| 精品乱人伦小说| 国产亚洲精品精华液| 亚洲国产精品国自产拍av| 国产精品国产馆在线真实露脸| 中文字幕亚洲不卡| 亚洲资源中文字幕| 日韩av中文字幕一区二区| 免费av网站大全久久| 韩国女主播一区| 丁香婷婷深情五月亚洲| 成人av午夜电影| 欧美精品不卡| 一本色道精品久久一区二区三区| 亚洲综合丁香| 欧美色区777第一页| 91精品国产综合久久福利软件| 精品人伦一区二区色婷婷|