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使用matplotlib绘制动画的方法
May 20 Python
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
May 17 Python
python制作websocket服务器实例分享
Nov 20 Python
Python学习小技巧之列表项的排序
May 20 Python
python实现各进制转换的总结大全
Jun 18 Python
解决pandas 作图无法显示中文的问题
May 24 Python
浅谈pycharm的xmx和xms设置方法
Dec 03 Python
pandas分别写入excel的不同sheet方法
Dec 11 Python
梅尔倒谱系数(MFCC)实现
Jun 19 Python
pytorch numpy list类型之间的相互转换实例
Aug 18 Python
详解Anaconda 的安装教程
Sep 23 Python
Python+OpenCV图像处理—— 色彩空间转换
Oct 22 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读取RSS(Feed)简单实例
2014/06/12 PHP
帝国cms常用标签汇总
2015/07/06 PHP
CI框架常用方法小结
2016/05/17 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
2018/08/21 PHP
js以对象为索引的关联数组
2010/07/04 Javascript
javascript静态页面传值的三种方法分享
2013/11/12 Javascript
JSuggest自动匹配下拉框使用方法(示例代码)
2013/12/27 Javascript
javascript函数重载解决方案分享
2014/02/19 Javascript
js校验表单后提交表单的三种方法总结
2014/02/28 Javascript
jquery插件之定时查询待处理任务数量
2014/05/01 Javascript
JavaScript中的无阻塞加载性能优化方案
2014/10/10 Javascript
Angular用来控制元素的展示与否的原生指令介绍
2015/01/07 Javascript
Bootstrap学习系列之使用 Bootstrap Typeahead 组件实现百度下拉效果
2016/07/07 Javascript
Vue.js每天必学之表单控件绑定
2016/09/05 Javascript
基于vue2.x的电商图片放大镜插件的使用
2018/01/22 Javascript
jQuery实现菜单的显示和隐藏功能示例
2018/07/24 jQuery
Angular项目如何升级至Angular6步骤全纪录
2018/09/03 Javascript
vue+koa2实现session、token登陆状态验证的示例
2019/08/30 Javascript
JS面向对象编程基础篇(三) 继承操作实例详解
2020/03/03 Javascript
[01:00:53]OG vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
用Python实现换行符转换的脚本的教程
2015/04/16 Python
python flask 如何修改默认端口号的方法步骤
2019/07/12 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
2019/12/19 Python
TensorFlow 显存使用机制详解
2020/02/03 Python
多个python文件调用logging模块报错误
2020/02/12 Python
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
写出程序把一个链表中的接点顺序倒排
2014/04/28 面试题
家长给老师的道歉信
2014/01/13 职场文书
总经理人事任命书
2014/06/05 职场文书
作风建设年活动总结
2014/08/27 职场文书
部门群众路线教育实践活动对照检查材料思想汇报
2014/10/07 职场文书
大学生军训感言
2015/08/01 职场文书
Python selenium的这三种等待方式一定要会!
2021/06/10 Python
MySQL 服务和数据库管理
2021/11/11 MySQL
Vue elementUI表单嵌套表格并对每行进行校验详解
2022/02/18 Vue.js
Python docx库删除复制paragraph及行高设置图片插入示例
2022/07/23 Python