SerializerMethodField

这是一个只读字段。它通过调用它所连接的序列化类的方法来获得它的值。它可用于将任何类型的数据添加到对象的序列化表示中。

签名: SerializerMethodField(method_name=None)

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
  • method_name - 要调用序列化对象的方法的名称。如果不包含,则默认为 get_ .
    由 method_name 参数引用的序列化方法应该接受一个参数(除了 self),这是要序列化的对象。它应该返回你想要包含在对象的序列化表示中的任何内容。例如:
    场景介绍:一个用户往往对应多个角色,而角色字段并不在UserProfile表中,这就需要我们新增数据到user序列化中
from .models import UserProfile
from .models import UserRole

class UserProfileSerializer(serializers.ModelSerializer):
    """
    show list serializer
    """
    role = serializers.SerializerMethodField()

    class Meta:
        model = UserProfile
        # fields = "__all__"
        fields = ["id", "username","role", "account", "really_name", "department", "tel_phone",
                  "create_time", "email", "last_time", "creator"]

    def get_role(self,obj):
        user_id = obj.id
        roles = [i.role.name for i in UserRole.objects.filter(user_id=user_id)]
        roles = ",".join(roles)
        return roles
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄