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

Django Serializer HiddenField隱藏字段實例

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

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

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

具體看代碼

# 假如我定義了一個serliazer,shop和status都是自動判斷后賦值的
# 用HiddenField定義字段,default方法來寫具體賦值函數(shù)
# default方法是一個類,需要重寫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

補充知識: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中傳進去呀,djangocontext上下文中才能取到

 def __call__(self):
  return self.object_flow


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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

    python愛心表白 每天都是浪漫七夕!

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

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

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

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

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

    Python json解析庫jsonpath原理及使用示例

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

    Selenium操作隱藏的元素及問題解決方案

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

最新評論

华坪县| 封丘县| 连州市| 敖汉旗| 疏附县| 曲麻莱县| 元江| 故城县| 安阳市| 宜兰市| 饶平县| 清涧县| 泰安市| 彩票| 友谊县| 沁源县| 曲水县| 东明县| 中西区| 孝昌县| 舟曲县| 公安县| 会宁县| 东宁县| 偏关县| 资溪县| 永福县| 民丰县| 西宁市| 攀枝花市| 阜康市| 志丹县| 洪洞县| 泾阳县| 连州市| 蕲春县| 滁州市| 商丘市| 雷山县| 南木林县| 新平|