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中函数的参数传递与可变长参数介绍
Jun 30 Python
Python读csv文件去掉一列后再写入新的文件实例
Dec 28 Python
Python+request+unittest实现接口测试框架集成实例
Mar 16 Python
Sanic框架应用部署方法详解
Jul 18 Python
Django基础三之视图函数的使用方法
Jul 18 Python
python3的数据类型及数据类型转换实例详解
Aug 20 Python
基于Python实现大文件分割和命名脚本过程解析
Sep 29 Python
Python高级编程之继承问题详解(super与mro)
Nov 19 Python
基于python实现可视化生成二维码工具
Jul 08 Python
使用Python项目生成所有依赖包的清单方式
Jul 13 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
Jul 13 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
Jan 29 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一些公用函数的集合
2008/03/27 PHP
php无限遍历目录示例
2014/02/21 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
2016/03/03 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
2016/12/28 PHP
一个实用的php验证码类
2017/07/06 PHP
php实现的三个常用加密解密功能函数示例
2017/11/06 PHP
JavaScript调用Activex控件的事件的实现方法
2010/04/11 Javascript
解决js中window.open弹出的是上次的缓存页面问题
2013/12/29 Javascript
详解AngularJS中自定义指令的使用
2015/06/17 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
JavaScript实现两个select下拉框选项左移右移
2017/03/09 Javascript
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
2017/05/13 NodeJs
node.js博客项目开发手记
2018/03/16 Javascript
JavaScript中的函数申明、函数表达式、箭头函数
2019/12/06 Javascript
JS实现密码框效果
2020/09/10 Javascript
Linux下编译安装MySQL-Python教程
2015/02/02 Python
python根据日期返回星期几的方法
2015/07/06 Python
django请求返回不同的类型图片json,xml,html的实例
2018/05/22 Python
python 多线程对post请求服务器测试并发的方法
2019/06/13 Python
pyqt5 键盘监听按下enter 就登陆的实例
2019/06/25 Python
Python 操作 ElasticSearch的完整代码
2019/08/04 Python
python3的url编码和解码,自定义gbk、utf-8的例子
2019/08/22 Python
python实现统计代码行数的小工具
2019/09/19 Python
html5+CSS3+JS实现七夕言情功能代码
2017/08/28 HTML / CSS
HTML5单页面手势滑屏切换原理分析
2017/07/10 HTML / CSS
canvas压缩图片以及卡片制作的方法示例
2018/12/04 HTML / CSS
西班牙品牌鞋子、服装和配饰在线商店:Esdemarca
2021/02/17 全球购物
extern是什么意思
2016/03/10 面试题
中学实习教师自我鉴定
2013/12/12 职场文书
社团活动策划书范文
2014/01/09 职场文书
优秀员工获奖感言
2014/03/01 职场文书
土建施工员岗位职责
2014/07/16 职场文书
2014年纠风工作总结
2014/12/08 职场文书
罚款通知怎么写
2015/04/22 职场文书
Nginx安装完成没有生成sbin目录的解决方法
2021/03/31 Servers
Python基础之条件语句详解
2021/06/16 Python