Django的SerializerMethodField

      網友投稿 706 2025-04-06

      目標

      有一個status狀態,后端存的是0、1,前端需要展示為否、是。

      后段返回給前端時,直接返回否、是,前端讀取展示,不需要判斷。

      實現方法1,加字段

      加一個只讀字段status_zh,根據status判斷賦值后返回給前端,前端使用status_zh

      例:

      # models.py ###### from django.db.models import Model, BooleanField class TestModel(Model): status = BooleanField(default=False, name='status') @property def status_zh(self): status_ = "是" if self.status else "否" return status_ ###### # seriailzer.py ###### from models import TestModel from rest_framework import serializers from rest_framework.serializers import SerializerMethodField, BooleanField class TestSerializer(serializers.ModelSerializer): status_zh = BooleanField(read_only=True) class Meta: model = TestModel fields = ("id", "status_zh", "status")

      Django的SerializerMethodField

      實現方法2,使用SerializerMethodField

      使用SerializerMethodField修改status的值

      例:

      # models.py ###### from django.db.models import Model, BooleanField class TestModel(Model): status = BooleanField(default=False, name='status') ###### # seriailzer.py ###### from models import TestModel from rest_framework import serializers from rest_framework.serializers import SerializerMethodField class TestSerializer(serializers.ModelSerializer): status = SerializerMethodField() class Meta: model = TestModel fields = ("id", "status") def get_status(selef, obj): return "是" if obj.status else "否"

      使用這個方法雖然簡化了一部分的代碼,但是也有隱患,status變成了一個read_only的值,無法進行修改,所以使用的時候需要考慮實際情況。

      SerializerMethodField文檔解釋

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

      簽名:SerializerMethodField(method_name=None)

      method_name - 要調用的序列化程序上方法的名稱。如果不包含此默認值get_。

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

      例如:

      from django.contrib.auth.models import User from django.utils.timezone import now from rest_framework import serializers class UserSerializer(serializers.ModelSerializer): days_since_joined = serializers.SerializerMethodField() class Meta: model = User def get_days_since_joined(self, obj): return (now() - obj.date_joined).days ```

      參考鏈接:Django-SerializerMethodField

      Django web前端

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:excel表格設置下拉框的方法(怎樣在excel表格設置下拉框)
      下一篇:怎樣在表格中加同樣的文字
      相關文章
      亚洲欧美日韩中文字幕一区二区三区 | 亚洲老熟女@TubeumTV| 亚洲无码精品浪潮| 亚洲人成电影网站国产精品 | MM1313亚洲国产精品| 亚洲精品天堂在线观看| 亚洲一卡2卡4卡5卡6卡在线99 | 久久亚洲高清综合| 国产精品亚洲二区在线观看| 亚洲精品国产电影| 亚洲人午夜射精精品日韩| 国产精品亚洲二区在线观看 | 亚洲高清中文字幕免费| 亚洲AV无码无限在线观看不卡| 色偷偷亚洲女人天堂观看欧| 涩涩色中文综合亚洲| 亚洲AV无码专区在线电影成人 | 国产精品亚洲专区无码牛牛| 在线精品自拍亚洲第一区| 日韩亚洲综合精品国产| 亚洲男人第一无码aⅴ网站| 中文字幕不卡亚洲| 日韩亚洲欧洲在线com91tv| 亚洲第一视频网站| 亚洲综合激情另类小说区| 亚洲性一级理论片在线观看| 激情五月亚洲色图| 亚洲国产成人手机在线观看| 国产亚洲视频在线观看| 久久久无码精品亚洲日韩软件| 亚洲国产成人片在线观看无码 | 精品国产日韩亚洲一区91| 亚洲av午夜精品一区二区三区| 亚洲人成色7777在线观看不卡| 国产成人麻豆亚洲综合无码精品| 亚洲成AV人片在| 亚洲精品人成电影网| 亚洲乱码在线卡一卡二卡新区| 亚洲av最新在线观看网址| 亚洲日本一区二区一本一道 | 亚洲AV无码一区二区乱子伦|