Django的SerializerMethodField

网友投稿 553 2022-05-30

目标

有一个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的值

Django的SerializerMethodField

例:

# 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小时内删除侵权内容。

上一篇:UTM 转 WGS84 (Python代码版)
下一篇:【小程序】基础内容
相关文章