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


Posted in Python onApril 22, 2020

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

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)          
        }
      })      

    })

渲染效果如下图所示

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

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

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

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

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

Python 相关文章推荐
Python的类实例属性访问规则探讨
Jan 30 Python
Python的pycurl包用法简介
Nov 13 Python
Python Requests 基础入门
Apr 07 Python
python+matplotlib绘制3D条形图实例代码
Jan 17 Python
python文本数据相似度的度量
Mar 12 Python
解决python 自动安装缺少模块的问题
Oct 22 Python
使用python matplotlib 画图导入到word中如何保证分辨率
Apr 16 Python
利用Python如何实时检测自身内存占用
May 09 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
Jun 12 Python
Python字符串函数strip()原理及用法详解
Jul 23 Python
python读取excel数据绘制简单曲线图的完整步骤记录
Oct 30 Python
Python包资源下载路径报404解决方案
Nov 05 Python
jupyter notebook中新建cell的方法与快捷键操作
Apr 22 #Python
TensorFlow使用Graph的基本操作的实现
Apr 22 #Python
如何在django中运行scrapy框架
Apr 22 #Python
TensorFlow实现批量归一化操作的示例
Apr 22 #Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
Apr 22 #Python
python实现四人制扑克牌游戏
Apr 22 #Python
如何在django中实现分页功能
Apr 22 #Python
You might like
php文字水印和php图片水印实现代码(二种加水印方法)
2013/12/25 PHP
php实现数组中索引关联数据转换成json对象的方法
2015/07/08 PHP
Using the TextRange Object
2006/10/14 Javascript
在网站上应该用的30个jQuery插件整理
2011/11/03 Javascript
在Linux上用forever实现Node.js项目自启动
2014/07/09 Javascript
使用window.prompt()实现弹出用户输入的对话框
2015/04/13 Javascript
基于Css3和JQuery实现打字机效果
2015/08/11 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
ES6所改良的javascript“缺陷”问题
2016/08/23 Javascript
js实现表单提交后不重新刷新当前页面
2016/11/30 Javascript
Bootstrap基本模板的使用和理解1
2016/12/14 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
2016/12/15 Javascript
详解JavaScript中return的用法
2017/05/08 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
用图片替换checkbox原始样式并实现同样的功能
2018/11/15 Javascript
Mpvue中使用Vant Weapp组件库的方法步骤
2019/05/16 Javascript
小程序多图列表实现性能优化的方法步骤
2019/05/28 Javascript
jquery 回调操作实例分析【回调成功与回调失败的情况】
2019/09/27 jQuery
layer.confirm()右边按钮实现href的例子
2019/09/27 Javascript
原生JS实现音乐播放器的示例代码
2021/02/25 Javascript
[01:07:22]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG加赛
2014/05/26 DOTA
浅谈Python单向链表的实现
2015/12/24 Python
tensorflow构建BP神经网络的方法
2018/03/12 Python
详解python异步编程之asyncio(百万并发)
2018/07/07 Python
Python爬虫实现简单的爬取有道翻译功能示例
2018/07/13 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
2019/07/08 Python
图文详解Django使用Pycharm连接MySQL数据库
2019/08/09 Python
如何基于python生成list的所有的子集
2019/11/11 Python
一款纯css3实现的竖形二级导航的实例教程
2014/12/11 HTML / CSS
飞利浦美国官网:Philips美国
2020/02/28 全球购物
Linux管理员面试题 Linux admin interview questions
2016/07/08 面试题
2014年网络管理员工作总结
2014/12/01 职场文书
鉴史问廉观后感
2015/06/10 职场文书
MySQL表的增删改查基础教程
2021/04/07 MySQL
Python 键盘事件详解
2021/11/11 Python
详细介绍Next.js脚手架完整搭建封装
2022/04/26 Javascript