目标
- 有一个
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