Django的restframework序列化多表字段的方法

首先,因为我们安装了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

  

这里要注意,我们的cbc这次是继承的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

时间: 2024-11-08 23:41:21

Django的restframework序列化多表字段的方法的相关文章

django使用restframework序列化查询集合(querryset)

第一: pip install djangorestframework 第二: 在setting.py文件中的app添加名为: 'rest_framework', 第三:再项目的APP下面新建名为(可以别的名字):serializers.py 第四:引入模型类到serializers.py,并在serializers.py中新建序列化类并定义要返回的字段 from rest_framework import serializers #引入序列化的模块 from ceshi.models impo

YbSoftwareFactory 代码生成插件【十九】:实体类配合数据库表字段进行属性扩展的小技巧

实体类通常需要和数据库表进行了ORM映射,当你需要添加新的属性时,往往同时也需要在数据库中添加相应的字段并配置好映射关系,同时可能还需对数据访问组件进行重新编译和部署才能有效.而当你开始设计一个通用数据访问组件后,因为项目需求的不同和需求的不断变化演变,很难不能保证不会再添加额外的属性和字段.特别是项目部署运行后,添加一个属性和字段带来的额外维护的工作量可能要远远超过对代码进行调整的工作量.本文提供了属性字段扩展的一种思路,在满足核心字段可通过实体类强类型进行访问的同时,还可通过C# 4.0提供

第三章 restframework——序列化组件

第三章 restframework--序列化组件 一.django自带的序列化组件serializers 二.restframework的序列化组件Serializer 三.restframework的序列化组件ModelSerializer 四.restframework的序列化组件请求数据校验和保存功能(钩子) 五.restframework的序列化组件源码分析 一.django自带的序列化组件serializers from django.core import serializers d

django之rest-framework

django的rest-framework是django很贴心的为我们准备的一个实例化app https://www.django-rest-framework.org/ 安装这个app pip install djangorestframework 安装好之后需要我们在项目的setting里面注册这个app INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes

Django REST framework序列化

Django REST framework序列化 开发我们的Web API的第一件事是为我们的Web API提供一种将代码片段实例序列化和反序列化为诸如json之类的表示形式的方式 models部分 from django.db import models class Book(models.Model): title = models.CharField(max_length=32) price = models.IntegerField() pub_date = models.DateFie

MySQL生产库中添加修改表字段引起主从崩溃的问题总结

上周末和开发人员对线上库中的部分表的在线DDL和update,这过程中出现了一些意料之外的问题,现将过程.分析和解决方案在这里总结一下 一. 需求背景: 要在如下表中添加字段(modified_at)并且更改默认值 table_name { baby_compbaby_comp_statusbaby_usrbaby_ad_userbaby_campbaby_ordbaby_acc_eva } 每张表执行如下操作ALTER TABLE `$table_name` ADD COLUMN `modif

Python全栈开发【Django进阶之序列化】

Django序列化 序列化是将对象状态转换为可保持或传输的格式的过程 反序列化是指将存储在存储媒体中的对象状态装换成对象的过程 例如游戏都有存档的功能.再次开始的时候只需读档即可(这即是一个序列化与反序列的过程) 序列化也可以将一个对象传递到另一个地方的 关于Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式. 1.serializers 用于序列化QuerySet中的对象 from django.core import serial

Supermap iClient 空间查询关联外表表查询多表字段示例代码

原创文章,转载请注明出处!http://blog.csdn.net/songhfu 空间查询关联属性表,并查询空间表和关联表字段示例代码如下: /* * 关联测试成功代码 * */ var joinItem=new SuperMap.REST.JoinItem({ foreignTableName: "V_ENABLEVIEW_LAND", joinFilter: "BBS_PARCEL.CADASTRALNO = V_ENABLEVIEW_LAND.CADASTRALNO

如何在Sql2008中获取表字段属性和注释?

如何在Sql2008中获取表字段属性和注释? select b.[value] from sys.columns a left join sys.extended_properties b on a.object_id=b.major_id and a.column_id=b.minor_id inner join sysobjects c on a.column_id=c.id and a.[name]='列名' and c.[name]='表名' SELECT 表名=case when a.