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变量和数据类型详解
Feb 15 Python
Python自动发邮件脚本
Mar 31 Python
python数据抓取分析的示例代码(python + mongodb)
Dec 25 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
Jul 25 Python
python多线程抽象编程模型详解
Mar 20 Python
Django继承自带user表并重写的例子
Nov 18 Python
python使用hdfs3模块对hdfs进行操作详解
Jun 06 Python
通过实例解析Python文件操作实现步骤
Sep 21 Python
Django websocket原理及功能实现代码
Nov 14 Python
python 实现表情识别
Nov 21 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
Feb 04 Python
Python3爬虫RedisDump的安装步骤
Feb 20 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中如何调用webservice的实例参考
2013/04/25 PHP
PHP仿博客园 个人博客(2) 数据库增添改删
2013/07/05 PHP
php-perl哈希算法实现(times33哈希算法)
2013/12/30 PHP
30个php操作redis常用方法代码例子
2014/07/05 PHP
实例讲解PHP面向对象之多态
2014/08/20 PHP
PHP中的类型提示(type hinting)功能介绍
2015/07/01 PHP
php实现zip文件解压操作
2015/11/03 PHP
使用phpstorm和xdebug实现远程调试的方法
2015/12/29 PHP
PHP实现的曲线统计图表示例
2016/11/10 PHP
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
2013/02/25 Javascript
div失去焦点事件实现思路
2014/04/22 Javascript
js面向对象编程之如何实现方法重载
2014/07/02 Javascript
JavaScript中的数组特性介绍
2014/12/30 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
JQuery在循环中绑定事件的问题详解
2016/06/02 Javascript
js实现从左向右滑动式轮播图效果
2017/07/07 Javascript
Node.js实现注册邮箱激活功能的方法示例
2018/03/23 Javascript
详解JavaScript添加给定的标签选项
2018/09/17 Javascript
总结4个方面优化Vue项目
2019/02/11 Javascript
微信小程序实现导航栏和内容上下联动功能代码
2020/06/29 Javascript
vue基于better-scroll仿京东分类列表
2020/06/30 Javascript
vue+elementUI 实现内容区域高度自适应的示例
2020/09/26 Javascript
[01:21]DOTA2新纪元-7.0新版本即将开启!
2016/12/11 DOTA
研究Python的ORM框架中的SQLAlchemy库的映射关系
2015/04/25 Python
详解python分布式进程
2018/10/08 Python
对python 命令的-u参数详解
2018/12/03 Python
python引用(import)某个模块提示没找到对应模块的解决方法
2019/01/19 Python
Python List cmp()知识点总结
2019/02/18 Python
Django实现发送邮件功能
2019/07/18 Python
Anaconda的安装及其环境变量的配置详解
2020/04/22 Python
python实现双人五子棋(终端版)
2020/12/30 Python
奥地利网上现代灯具和灯饰店:Lampenwelt.at
2018/01/29 全球购物
薇姿法国官网:Vichy法国
2021/01/28 全球购物
编辑硕士自荐信范文
2013/11/27 职场文书
2016清明节森林防火广播稿
2015/12/17 职场文书
【海涛dota解说】海涛小满开黑4v5被破两路翻盘潮汐第一视角解说
2022/04/01 DOTA