Django的SerializerMethodField
目標
有一個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")
實現方法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小時內刪除侵權內容。