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 20 Python
Python列出一个文件夹及其子目录的所有文件
Jun 30 Python
python OpenCV学习笔记实现二维直方图
Feb 08 Python
Python爬虫设置代理IP的方法(爬虫技巧)
Mar 04 Python
Numpy掩码式数组详解
Apr 17 Python
pycharm下查看python的变量类型和变量内容的方法
Jun 26 Python
Python 利用切片从列表中取出一部分使用的方法
Feb 01 Python
python批量修改ssh密码的实现
Aug 08 Python
在django中实现页面倒数几秒后自动跳转的例子
Aug 16 Python
Pytorch 数据加载与数据预处理方式
Dec 31 Python
python制作一个简单的gui 数据库查询界面
Nov 19 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
Dec 11 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获得用户使用的代理服务器ip即真实ip
2006/12/31 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
PHP使用NuSOAP调用Web服务的方法
2015/07/18 PHP
网页右键ie不支持event.preventDefault和event.returnValue (需要加window)
2013/02/22 Javascript
Extjs4 关于Store的一些操作(加载/回调/添加)
2013/04/18 Javascript
js使浏览器窗口最大化实现代码(适用于IE)
2013/08/07 Javascript
jquery配合css简单实现返回顶部效果
2013/09/30 Javascript
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
js实现用户注册协议倒计时的方法
2015/01/21 Javascript
jquery中filter方法用法实例分析
2015/02/06 Javascript
JS实现很酷的EMAIL地址添加功能实例
2015/02/28 Javascript
jQuery Mobile中的button按钮组件基础使用教程
2016/05/23 Javascript
jQuery原理系列-css选择器的简单实现
2016/06/07 Javascript
微信小程序 wx:key详细介绍
2016/10/28 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
2016/12/14 Javascript
JS实现JSON.stringify的实例代码讲解
2017/02/07 Javascript
浅谈JavaScript中的属性:如何遍历属性
2017/09/14 Javascript
JS实现的找零张数最小问题示例
2017/11/28 Javascript
微信小程序使用modal组件弹出对话框功能示例
2017/11/29 Javascript
vue cli使用绝对路径引用图片问题的解决
2017/12/06 Javascript
js中null与空字符串&quot;&quot;的区别讲解
2019/01/17 Javascript
Vue + Scss 动态切换主题颜色实现换肤的示例代码
2020/04/27 Javascript
对python模块中多个类的用法详解
2019/01/10 Python
python pycharm的安装及其使用
2019/10/11 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
Python面向对象编程基础实例分析
2020/01/17 Python
pycharm设置python文件模板信息过程图解
2020/03/10 Python
Python pysnmp使用方法及代码实例
2020/08/24 Python
HTML5 MiranaVideo播放器 (代码开源)
2010/06/11 HTML / CSS
理肤泉美国官网:La Roche-Posay
2018/01/17 全球购物
小学生家长评语大全
2014/02/10 职场文书
民事诉讼授权委托书范文
2014/08/02 职场文书
2014年个人教学工作总结
2014/12/09 职场文书
优秀班组事迹材料
2014/12/24 职场文书
出纳岗位职责范本
2015/03/31 职场文书
Shell脚本一键安装Nginx服务自定义Nginx版本
2022/03/20 Servers