最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django Serializer HiddenField隱藏字段實(shí)例

 更新時(shí)間:2020年03月31日 08:33:53   作者:我就是全世界  
這篇文章主要介紹了Django Serializer HiddenField隱藏字段實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

Django rest_framework serializer.HiddenField(default=serializer.CurrentUser())

在用Dajngo RestFramework時(shí), 有時(shí)候需要這么一個(gè)場(chǎng)景,前端不需要傳一個(gè)或多個(gè)字段,這些字是直接根據(jù)用戶登錄信息判斷自動(dòng)賦值的,如果用mixin和viewset進(jìn)行搭配寫接口,要么重寫create, update等方法,要么就是在serializer_class時(shí)就定義默認(rèn)值,而第二種方法明顯簡(jiǎn)單一些。

具體看代碼

# 假如我定義了一個(gè)serliazer,shop和status都是自動(dòng)判斷后賦值的
# 用HiddenField定義字段,default方法來(lái)寫具體賦值函數(shù)
# default方法是一個(gè)類,需要重寫set_context的方法
from rest_framework.compat import (
 InvalidTimeError, MaxLengthValidator, MaxValueValidator,
 MinLengthValidator, MinValueValidator, unicode_repr, unicode_to_repr
)
class CurrentShopDefault(object):
 def set_context(self, serializer_field):
  self.shop = serializer_field.context['request'].user.shop

 def __call__(self):
  return self.shop

 def __repr__(self):
  return unicode_to_repr('%s()' % self.__class__.__name__)

class CurrentStatus(object):
 def set_context(self, serializer_field):
  user_info = serializer_field.context['request'].user
  if user_info.shop.shop_type == 'SHOP_TYPE_COMCIRCLE':
   self.status = 1
  else:
   self.status = 2

 def __call__(self):
  return self.status

 def __repr__(self):
  return unicode_to_repr('%s()' % self.__class__.__name__)

# 定義serializer
class GameSerializer(serializers.ModelSerializer):
 class Meta:
  model = Game
  exclude = ['created_time']

 shop = serializers.HiddenField(
  default=CurrentShopDefault()
 )
 status = serializers.HiddenField(
  default=CurrentStatus()
 )

最后在view文件的class里直接指定serializer_class就好了

class GameOpView(mixins.CreateModelMixin, mixins.UpdateModelMixin, mixins.RetrieveModelMixin, mixins.DestroyModelMixin, viewsets.GenericViewSet):
 """
  retrieve:
   獲取-游戲詳情
  create:
   創(chuàng)建-游戲
  update:
   更新-游戲
  delete:
   刪除-游戲
  partial_update:
   更新游戲狀態(tài)
  total_info:
   游戲數(shù)據(jù)總覽
 """
 permission_classes = [IsShop, ]
 pagination_class = StandardResultsSetPagination

 def get_queryset(self):
  return Game.objects.filter(
   Q(shop=self.request.user.shop) | Q(shop__com_circle=self.request.user.shop))

 def get_serializer_class(self):
  if self.action == 'partial_update':
   return GameStatusSerializer
  elif self.action == 'retrieve':
   return GameReadSerializer
  else:
   return GameSerializer

補(bǔ)充知識(shí):drf 中serializers.HiddenField使用方法

class CurrentUser(object):
 def set_context(self, serializer_field):
  self.user_obj = serializer_field.context['request'].user

 def __call__(self):
  return self.user_obj

class GetObjectFlow(object):
 def set_context(self, serializer_field):
  self.object_flow = serializer_field.context['request'].data.get('object_flow') # 這里需要在views中傳進(jìn)去呀,djangocontext上下文中才能取到

 def __call__(self):
  return self.object_flow


class AddHolidaySerializer(serializers.ModelSerializer, BaseModelSerializer):
 user = serializers.HiddenField(default=CurrentUser()) # 給用戶外鍵賦當(dāng)前請(qǐng)求的user
 object_flow = serializers.HiddenField(default=GetObjectFlow()) # 后端自己處理一些特殊的外鍵
 status = serializers.HiddenField(default=0) # 默認(rèn)新增時(shí)給status賦初值

 class Meta:
  model = Holiday
  exclude = ('deleted',)

以上這篇Django Serializer HiddenField隱藏字段實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python獲取各操作系統(tǒng)硬件信息的方法

    python獲取各操作系統(tǒng)硬件信息的方法

    這篇文章主要介紹了python獲取各操作系統(tǒng)硬件信息的方法,實(shí)例分析了Python在windows、Linux及Mac等操作系統(tǒng)上獲取CPU信息的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • pycharm創(chuàng)建臨時(shí)文件scatch file的方法詳解

    pycharm創(chuàng)建臨時(shí)文件scatch file的方法詳解

    JetBrains PyCharm是一種Python IDE,其帶有一整套可以幫助用戶在使用Python語(yǔ)言開發(fā)時(shí)提高其效率的工具,這篇文章主要介紹了pycharm創(chuàng)建臨時(shí)文件scatch file的方法,需要的朋友可以參考下
    2024-07-07
  • python實(shí)現(xiàn)rar解壓和壓縮的方法(附源碼)

    python實(shí)現(xiàn)rar解壓和壓縮的方法(附源碼)

    數(shù)據(jù)量現(xiàn)在越來(lái)越大,壓縮文件在日常生活中很常用,這篇文章主要給大家介紹了關(guān)于python實(shí)現(xiàn)rar解壓和壓縮的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • python3.6利用pyinstall打包py為exe的操作實(shí)例

    python3.6利用pyinstall打包py為exe的操作實(shí)例

    今天小編就為大家分享一篇python3.6利用pyinstall打包py為exe的操作實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • 跟老齊學(xué)Python之有容乃大的list(1)

    跟老齊學(xué)Python之有容乃大的list(1)

    這一講中的list類型,也是python的一種數(shù)據(jù)類型。翻譯為:列表。LIST在python中具有非常強(qiáng)大的功能。
    2014-09-09
  • python愛(ài)心表白 每天都是浪漫七夕!

    python愛(ài)心表白 每天都是浪漫七夕!

    每天都是浪漫七夕!這篇文章主要為大家詳細(xì)介紹了python愛(ài)心表白,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • python實(shí)現(xiàn)海螺圖片的方法示例

    python實(shí)現(xiàn)海螺圖片的方法示例

    這篇文章主要介紹了python實(shí)現(xiàn)海螺圖片的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 詳解Python的Flask框架中生成SECRET_KEY密鑰的方法

    詳解Python的Flask框架中生成SECRET_KEY密鑰的方法

    密鑰值的生成功能十分重要,幾乎也是各大Web開發(fā)框架的標(biāo)配,Flask當(dāng)然也不例外,這里我們就來(lái)詳解Python的Flask框架中生成SECRET_KEY密鑰的方法
    2016-06-06
  • Python json解析庫(kù)jsonpath原理及使用示例

    Python json解析庫(kù)jsonpath原理及使用示例

    這篇文章主要介紹了Python json解析庫(kù)jsonpath原理及使用示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Selenium操作隱藏的元素及問(wèn)題解決方案

    Selenium操作隱藏的元素及問(wèn)題解決方案

    這篇文章主要介紹了Selenium操作隱藏的元素及問(wèn)題解決方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-12-12

最新評(píng)論

靖州| 博兴县| 阳西县| 天峨县| 调兵山市| 惠东县| 班玛县| 垦利县| 平阳县| 若羌县| 开平市| 筠连县| 梅州市| 普洱| 英德市| 天峻县| 义乌市| 宁陕县| 达孜县| 木兰县| 专栏| 瓮安县| 隆子县| 南和县| 治县。| 鹿泉市| 方城县| 巴中市| 舒城县| 唐海县| 密云县| 宾阳县| 唐山市| 南漳县| 库车县| 长治市| 新丰县| 禄劝| 青川县| 黄山市| 肥城市|