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 23 Python
在Linux上安装Python的Flask框架和创建第一个app实例的教程
Mar 30 Python
python+selenium实现京东自动登录及秒杀功能
Nov 18 Python
python正则表达式面试题解答
Apr 28 Python
spark: RDD与DataFrame之间的相互转换方法
Jun 07 Python
Python爬虫实现(伪)球迷速成
Jun 10 Python
解决python ogr shp字段写入中文乱码的问题
Dec 31 Python
pyqt5使用按钮进行界面的跳转方法
Jun 19 Python
详解PANDAS 数据合并与重塑(join/merge篇)
Jul 09 Python
Python实现图片添加文字
Nov 26 Python
Django启动时找不到mysqlclient问题解决方案
Nov 11 Python
pandas数据分组groupby()和统计函数agg()的使用
Mar 04 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
《忧国的莫里亚蒂》先导宣传图与STAFF公开
2020/03/04 日漫
mysql总结之explain
2012/02/27 PHP
用来解析.htpasswd文件的PHP类
2012/09/05 PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
PHP SPL标准库之接口(Interface)详解
2015/05/11 PHP
详解PHP的Yii框架中自带的前端资源包的使用
2016/03/31 PHP
laravel中的错误与日志用法详解
2016/07/26 PHP
Extjs Ajax 乱码问题解决方案
2009/04/15 Javascript
Firefox中autocomplete=&quot;off&quot; 设置不起作用Bug的解决方法
2011/03/25 Javascript
jQuery的初始化与对象构建之浅析
2011/04/12 Javascript
JQueryEasyUI datagrid框架的基本使用
2013/04/08 Javascript
javascript原型链继承用法实例分析
2015/01/28 Javascript
jQuery超简单选项卡完整实例
2015/09/26 Javascript
JS定义类的六种方式详解
2016/05/12 Javascript
JS如何判断json是否为空
2016/07/06 Javascript
jQuery自定义插件详解及实例代码
2016/12/29 Javascript
基于Vue实现页面切换左右滑动效果
2020/06/29 Javascript
Vue-cli-webpack搭建斗鱼直播步骤详解
2017/11/17 Javascript
如何重置vue打印变量的显示方式
2017/12/06 Javascript
Angular开发实践之服务端渲染
2018/03/29 Javascript
微信小程序在线客服自动回复功能(基于node)
2019/07/03 Javascript
Node.js之删除文件夹(含递归删除)代码实例
2019/09/09 Javascript
[07:25]DOTA2-DPC中国联赛2月5日Recap集锦
2021/03/11 DOTA
Python SQL查询并生成json文件操作示例
2018/08/17 Python
Python基于百度云文字识别API
2018/12/13 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
2019/06/12 Python
python实现手势识别的示例(入门)
2020/04/15 Python
Anaconda+vscode+pytorch环境搭建过程详解
2020/05/25 Python
加拿大知名的国际儿童品牌:Hatley
2016/11/09 全球购物
学习雷锋活动总结
2014/04/29 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
教师节倡议书
2014/08/30 职场文书
南京导游词
2015/02/03 职场文书
领导新年致辞2016
2015/07/29 职场文书
掌握一个领域知识,高效学习必备方法
2019/08/08 职场文书
vue 给数组添加新对象并赋值
2022/04/20 Vue.js