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利用elaphe制作二维条形码实现代码
May 25 Python
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
Dec 03 Python
python开发之字符串string操作方法实例详解
Nov 12 Python
基于numpy中数组元素的切片复制方法
Nov 15 Python
Python的UTC时间转换讲解
Feb 26 Python
python实现对输入的密文加密
Mar 20 Python
Python Flask框架扩展操作示例
May 03 Python
Pandas实现dataframe和np.array的相互转换
Nov 30 Python
Python模块_PyLibTiff读取tif文件的实例
Jan 13 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
Feb 26 Python
Python实现封装打包自己写的代码,被python import
Jul 12 Python
Python3使用Qt5来实现简易的五子棋小游戏
May 02 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的网址
2006/11/25 PHP
解析curl提交GET,POST,Cookie的简单方法
2013/06/29 PHP
PHP内核探索:变量概述
2014/01/30 PHP
jQuery Mobile + PHP实现文件上传
2014/12/12 PHP
php实现批量修改文件名称的方法
2016/07/23 PHP
thinkPHP实现的省市区三级联动功能示例
2017/05/05 PHP
用window.location.href实现刷新另个框架页面
2007/03/07 Javascript
JQuery在光标位置插入内容的实现代码
2010/06/18 Javascript
JavaScript实现模仿桌面窗口的方法
2015/07/18 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
2016/10/01 Javascript
babel基本使用详解
2017/02/17 Javascript
js指定步长实现单方向匀速运动
2017/07/17 Javascript
ES6扩展运算符的用途实例详解
2017/08/20 Javascript
jq.ajax+php+mysql实现关键字模糊查询(示例讲解)
2018/01/02 Javascript
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
vue+express 构建后台管理系统的示例代码
2018/07/19 Javascript
vue.js图片转Base64上传图片并预览的实现方法
2018/08/02 Javascript
4个顶级开源JavaScript图表库
2018/09/29 Javascript
vue实现element表格里表头信息提示功能(推荐)
2019/11/20 Javascript
Python生成验证码实例
2014/08/21 Python
Python中给List添加元素的4种方法分享
2014/11/28 Python
Python制作简单的网页爬虫
2015/11/22 Python
详解django自定义中间件处理
2018/11/21 Python
python利用跳板机ssh远程连接redis的方法
2019/02/19 Python
opencv中图像叠加/图像融合/按位操作的实现
2020/04/01 Python
python中wx模块的具体使用方法
2020/05/15 Python
基于python实现判断字符串是否数字算法
2020/07/10 Python
大学生就业推荐信范文
2013/11/29 职场文书
军训拉歌口号
2014/06/13 职场文书
2014幼儿园小班工作总结
2014/11/10 职场文书
社会实践单位意见
2015/06/05 职场文书
广播稿:校园广播稿范文
2019/04/17 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书
Python3中最常用的5种线程锁实例总结
2021/07/07 Python