• 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,多对多字段也是按照我们的函数的返回值进行显示的

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

  • 相关阅读:
    JDK1.8源码之HashMap(一)——实现原理、查找及遍历
    JDK1.8源码之ArrayList
    03、Swagger2和Springmvc整合详细记录(爬坑记录)
    02、Java的lambda表达式和JavaScript的箭头函数
    Java-IO流之输入输出流基础示例
    JDBC API 事务的实践
    JDBC API 可滚动可编辑的结果集
    Java虚拟机----垃圾回收与内存分配
    Java数据库连接与查询
    Java虚拟机-对象的创建和访问
  • 原文地址:https://www.cnblogs.com/bainianminguo/p/10441175.html
Copyright © 2020-2023  润新知