django drf框架中serializerMethodField作用

在我们开发的时候,我么使用序列化器序列化返回的时候,返回的大多都是数据框中一个表中的字段,但是我们还想返回一些其他表(关联表)中的字段数据怎么办,或者说根据字段数据(true flase)来返回别的数据,此时怎么办哪,drf框架已经帮我们想好了,他就是serializerMethodField,具体怎么做哪,我们可以看代码

class MessageListSerializer(serializers.ModelSerializer):
    id = serializers.IntegerField(read_only=True)
    title = serializers.CharField(read_only=True)
    created_at = serializers.DateTimeField(read_only=True)
    is_read = serializers.SerializerMethodField()

    def get_is_read(self, instance):
        # return '已读' if instance['is_read'] else '未读'

        return '已读' if instance.is_read else '未读'

    class Meta:
        model = Message
        # fields = ('id', 'title', 'created_at', 'is_read')
        fields = ('id', 'title', 'created_at', 'is_read')``
```python

标准写法就是get_名字,instance表示的是此时你model中的对象,可以根据此对象来查询关联的数据库中字段的数据,

另外一个例子:

class RoleModelSerializer(serializers.ModelSerializer):
    """角色模型序列化器"""
    user_count = serializers.SerializerMethodField(label='用户数量')  # 新增数据库不存在字段用户数量
 
    class Meta:
        model = Role
        fields = ['id', 'name', 'desc', 'user_count']
 
    def get_user_count(self, obj):
        """
        返回当前角色用户数量
        固定写法,obj代表Role实例对象,模型类配置了反向引用user代表当前角色用户
        """
        number = obj.user.count()
        return number``

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值