Django的rest_framework的序列化组件之序列化多表字段的方法

首先,因为我们安装了restframework,所以我们需要在django的settings中引入restframework

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app1.apps.App1Config',
    "rest_framework",
]

  

 

然后我们在使用cbv的方式进行多表的序列化

from rest_framework.views import APIView
class Book_cbv(APIView):
    def get(self,request):
        query_list = models.Book.objects.all()
        bs = book_serializers(query_list,many=True)

        from rest_framework.response import Response
        # return HttpResponse(bs.data)
        return Response(bs.data)
    def post(self,request):
        pass

  

这里要注意,我们的cbv这次是继承的rest_framework的APIView

 

 这里为了返回的数据好看一些,我们导入了rest_framework的Response模块

        from rest_framework.response import Response
        # return HttpResponse(bs.data)
        return Response(bs.data)

  

到此,我们现在和单表的序列化还是一样的,下面我们进入多表的序列化

首先看下序列化的类是怎么写的

class book_serializers(serializers.Serializer):
    id = serializers.IntegerField()
    book_name = serializers.CharField()
    book_price = serializers.DecimalField(max_digits=5,decimal_places=2)

    # 一对多,关联指定的对象,然后显示指定对象的字段
    book_publish = serializers.CharField(source="book_publish.id")

    book_auther = serializers.SerializerMethodField()
    def get_book_auther(self,obj):
        s = ""
        for i in obj.book_auther.all():
            s = s + i.auther_name + "|"
        return s

  

首先看下一对多的字段,这里的意思是source这个字段代表我要显示一对多中的一表要显示的信息

    # 一对多,关联指定的对象,然后显示指定对象的字段
    book_publish = serializers.CharField(source="book_publish.id")

  

最后看下多对多字段该如何处理

    book_auther = serializers.SerializerMethodField()
    def get_book_auther(self,obj):
        s = ""
        for i in obj.book_auther.all():
            s = s + i.auther_name + "|"
        return s

  

重点看下我截图的位置,多对多字段要使用serializers.SerializerMethodField这个方法

 

 下面我们来解释一下下面的函数,首先get_后面的book_auther这个就是多对多字段,传递的obj这个就是book这个model对象,多对多字段具体要显示什么,完全取决于get_book_auther这个函数的返回值

 

 

 

 下面我们通过postman发送get请求,看下返回值

 

 我们看到一对多字段是显示的一表中的id,多对多字段也是按照我们的函数的返回值进行显示的

 

至此,单表的序列化,一对多字段的序列化,多对多字段的序列化都已经完成了

 

转载于:https://www.cnblogs.com/bainianminguo/p/10441175.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值