Django数据结果集序列化并展示实现过程

示例为一对多的表关系,学生为多,老师为一,设置外键字段可以为空,也就是说关联的老师被删除该学生依然存在,只是相应字段留空

class Teacher(models.Model):
  name = models.CharField(max_length=10,verbose_name='老师名称')
  password = models.CharField(max_length=10,verbose_name='密码')
  class Meta:
    verbose_name_plural = '教师表'
  def __str__(self):
    return self.name
class Student(models.Model):
  teacher = models.ForeignKey(to=Teacher,on_delete=models.SET_NULL,null=True,verbose_name='教师')
  name = models.CharField(max_length=10,verbose_name='学生名字')
  age = models.IntegerField(verbose_name='年龄')
  class Meta:
    verbose_name_plural = '学生表'
  def __str__(self):
    return self.name

     teacher = models.Teacher.objects.get(pk=id) # id=id的某位老师
students = teacher.student_set.all() # 以一表反向查询多表,查询这位老师的学生

此时,all()返回的是一个结果集。<QuerySet [<Student: 学生1>, <Student: 学生22>, <Student: 学生3>, <Student: 学生44>]>

这里要将这个结果传给前端ajax需要先将其转成json格式,但是这样的一个结果集又不能使用json.dumps的。

我的方法是先给它转成列表嵌套字典再进行序列化操作

def index(request):
  if request.method == "GET":
    teacher_name = request.session.get('name')
    teacher = models.Teacher.objects.get(name=teacher_name)
    students = teacher.student_set.all()
    print(students)
    list = []
    for i in students:
      json_dict = {}
      json_dict['name'] = i.name
      json_dict['age'] = i.age
      list.append(json_dict)
    return JsonResponse(list,safe=False)  # 这里safe默认为True,只接受参数为dict字典类型,非dict类型---“报错:In order to allow non-dict objects to be serialized set the safe parameter to False.” safe=False之后list列表, tuple元祖, set集合就都可以

前端ajax接收参数,并且循环变量当前传过去的列表

$('#submit2').click(function(){
      $.ajax({
        url:'/app1/index/',
        type:'GET',
        success:function(res){
          console.log(res)
          var str = ''
          for(var i = 0; i < res.length; i++){     # js中的for循环
            str += '<li>' + res[i]['name'] + '</li>'
            }
            $('#students').html(str)
        }
      })      

    })

渲染效果如下图所示

<button id="submit2">点击查看我的学生</button>
<p id="students"></p>

就是这个小小的按钮,竟然在背后做了这么多事情,使得我们要的信息成功的展示在了下面的标签里[/code]

所以任何一份职业都不容易,没有小角色,都是大人物

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python的Django REST框架中的序列化及请求和返回

    序列化Serialization 1. 设置一个新的环境 在我们开始之前, 我们首先使用virtualenv要创建一个新的虚拟环境,以使我们的配置和我们的其他项目配置彻底分开. $mkdir ~/env $virtualenv ~/env/tutorial $source ~/env/tutorial/bin/avtivate 现在我们处在一个虚拟的环境中,开始安装我们的依赖包 $pip install django $pip install djangorestframework $pip i

  • django自带serializers序列化返回指定字段的方法

    django orm 有个defer方法,指定模型排除的字段. 如下返回的Queryset, 排除'username', 'id'. users=models.UserInfo.objects.defer('username','id') 或users=models.UserInfo.objects.filter(...).defer('username','id') 再如下,使用django自带serializers进行序列,发现序列化的数据仍存在'username', 'id'这两个字段.

  • Django框架序列化与反序列化操作详解

    本文实例讲述了Django框架序列化与反序列化操作.分享给大家供大家参考,具体如下: Serializer类 1.定义: Django REST framework中的Serializer使用类来定义,须继承rest_framework.serializers.Serializer. 例: class BookInfoSerializer(serializers.Serializer): """图书数据序列化器""" id = serialize

  • django Serializer序列化使用方法详解

    Serializer序列化器 定义Serializer 1. 定义方法 Django REST framework中的Serializer使用类来定义,须继承自rest_framework.serializers.Serializer. 例如,我们已有了一个数据库模型类BookInfo class BookInfo(models.Model): btitle = models.CharField(max_length=20, verbose_name='名称') bpub_date = mode

  • django序列化serializers过程解析

    这篇文章主要介绍了django序列化serializers过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 DRF的核心 就是 前后端分离的核心 前后端分离开发的核心: 将模型转换为json 称之为 序列化 将json转换为模型 称之为 反序列化 Django的序列化工具让你可以将Django的模型'翻译'成其它格式的数据.通常情况下,这种其它格式的数据是基于文本的,并且用于数据交换\传输过程. 序列化数据 Django为我们提供了一个强

  • Django框架中序列化和反序列化的例子

    1.序列化 DRF的核心 就是 前后端分离的核心 前后端分离开发的核心: 将模型转换为json 称之为 序列化 将json转换为模型 称之为 反序列化 1.序列化器的字段 Serializer 序列化器 为了得到模型里的字段,序列化器中的字段应与模型类中的字段名一致 ''' serializers.py ''' class BookInfoSerializer(serializers.Serializer): # read_only=True 只能读 不能修改 id = serializers.

  • Django REST Framework序列化外键获取外键的值方法

    需求:序列化外键,获取外键的除id之外的值 使用Django REST Framework虽然开发接口快速,但是如果想要获取到除外键id值之外的外键信息,直接继承serializers.ModelSerializer类,然后在fields中指定返回的字段是获取不到外键的其他值的,比如我现在需要外键的name属性值,下面就给大家介绍两种方法通过序列化外键来获取我们想要的外键的值. 这里有两个Model:问卷(Questionnaire):问题(Question).一张问卷中包含多个问题,问题通过外

  • django model object序列化实例

    提到序列化与反序列化,通常会想到 json ,xml .在J2EE的开发中,这是很常用的技术,比如一个java class与xml之间的序列化与反序列化,我们可以通过 xstream来实现,如果是与json之间的转换,我们可以通过 gson.jar或者jsonlib.jar 来实现.方法很多,也是常见的方法. 但在python 中,我们常用的是json 的序列化,python2.7 已经包含了json package,这个也是从simplejson 基础上改变而来.这个json 包主要提供了du

  • Django数据结果集序列化并展示实现过程

    示例为一对多的表关系,学生为多,老师为一,设置外键字段可以为空,也就是说关联的老师被删除该学生依然存在,只是相应字段留空 class Teacher(models.Model): name = models.CharField(max_length=10,verbose_name='老师名称') password = models.CharField(max_length=10,verbose_name='密码') class Meta: verbose_name_plural = '教师表'

  • Python如何把不同类型数据的json序列化

    现代网络应用Web APP或大型网站的后台一般只有一个,然后客户端却是各种各样的(iOS, android, 浏览器), 而且客户端的开发语言很可能与后台的开发语言不一样.这时我们需要后台能够提供可以跨平台跨语言的一种标准的数据交换格式供前后端沟通(这就是Web API的作用).如今大家最常用的跨平台跨语言数据交换格式就是JSON(JavaScript Object Notation)了.JSON是一种文本序列化格式(它输出的是unicode文件,大多数时候会被编码为utf-8),人们很容易进行

  • Django动态随机生成温度前端实时动态展示源码示例

    目录 随机生成温度 前端动态实时 一.django APScheduler定时任务 简介 安装 使用步骤 基础组件 二.dwebsocket 简介 安装 使用方法 属性和方法 为了模拟随机的温度显示,在models中的表中的数据 views 路由 VUE中的代码 随机生成温度 前端动态实时 一.django APScheduler定时任务 简介 APScheduler的全称是Advanced Python Scheduler. 它是一个轻量级的 Python 定时任务调度框架. APSchedu

  • django rest framework serializers序列化实例

    serializers是将复杂的数据结构变成json或者xml这个格式的 serializers有以下几个作用: - 将queryset与model实例等进行序列化,转化成json格式,返回给用户(api接口). - 将post与patch/put的上来的数据进行验证. - 对post与patch/put数据进行处理. 实现序列化二个类:Serializer与ModelSerializer 比较 ModelSerializer(Serializer) 即 ModelSerializer继承了Se

  • Django数据统计功能count()的使用

    一.view实现计数 在apiviews.py中加入以下内容 from ApiTest.models import ApiTest from django.shortcuts import render def api_test_manage(request): apitest_count = ApiTest.objects.all().count() return render(request, "apitest_manage.html", {'user': username, 'a

  • echarts动态获取Django数据的实现示例

    目录 一.后端 二.前端 三.页面效果 四.总结 在开发过程中我们需要将我们的数据通过图标的形式展现出来,接下来我为大家介绍一个有趣的框架:Echarts.这是一个使用JavaScript实现的开源可视化库,提供了常规的折线图.柱状图.散点图.饼图.K线图,用于统计的盒形图,用于地理数据可视化的地图.热力图.线图,用于关系数据可视化的关系图.treemap.旭日图,多维数据可视化的平行坐标,还有用于 BI 的漏斗图,仪表盘,并且支持图与图之间的混搭(官网照抄,有兴趣的小伙伴可以去官网发现更多ec

  • 执行Django数据迁移时报 1091错误及解决方法

    问题描述 今天在Pycharm 中的Terminal下,执行数据迁移操作时,第一步: Python manage.py makemigrations ,是没有任何问题,但就是在执行真正的数据迁移时,也就是第二步:Python manage.py migrate 时,报错,错误截图如下 大概的意思就是   错误代码1091,原因是  "无法删除'dt_id':请检查列/键是否存在". 问题的解决 分析: 可能是数据库中的字段结构,已经完成了对此字段的修改,但是在执行数据迁移的时候,生成的

  • Django数据映射(一对一,一对多,多对多)

    目录 数据表关联关系映射 一对一映射 用法示例 一对多映射 用法示例 多对多映射 用法示例 数据表关联关系映射 常用的表关联方式有三种: 一对一映射如: 一个身份证对应一个人 一对多映射如: 一个班级可以有多个学生 多对多映射如: 一个学生可以报多个课程,一个课程可以有多个学生学习 一对一映射 一对一是表示现实事物间存在的一对一的对应关系. 如:一个家庭只有一个户主,一个男人有一个妻子,一个人有一个唯一的指纹信息等 语法 class A(model.Model): ... class B(mod

  • zookeeper集群搭建超详细过程

    目录 一.准备三台虚拟机,并列出对应的IP地址和主机名,如下图所示 二.环境准备(下面的步骤每一台虚拟机都需要做!!) 1.关闭防火墙 2. 配置操作系统 3. 设置本机IP地址与MAC地址 三.安装与配置zookeeper 四.zookeeper集群测试 一.准备三台虚拟机,并列出对应的IP地址和主机名,如下图所示 IP Hostname 192.168.154.133 zookeeper1 192.168.154.134 zookeeper2 192.168.154.135 zookeepe

随机推荐