示例为一对多的表关系,学生为多,老师为一,设置外键字段可以为空,也就是说关联的老师被删除该学生依然存在,只是相应字段留空

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)
}
}) })

渲染效果如下图所示

    <button id="submit2">点击查看我的学生</button>
<p id="students"></p> 就是这个小小的按钮,竟然在背后做了这么多事情,使得我们要的信息成功的展示在了下面的标签里

所以任何一份职业都不容易,没有小角色,都是大人物

最新文章

  1. The system cannot find the file specified
  2. 使用GitHub for Windows客户端管理京东代码库项目
  3. TCP的那些事儿(上)
  4. 【原创】CDM添加新磁盘,然后负载
  5. [开发笔记]-火狐的event和jquery1.9.1.min的问题
  6. 学习java之HashMap和TreeMap
  7. 257. Binary Tree Paths
  8. ubuntu下apache与php配置
  9. mac制作icns图标
  10. jQuery中$(function(){})与(function($){})(jQuery)、$(document).ready(function(){})等的区别详细讲解 ----转载
  11. truffle unbox react 出坑指南
  12. .innerhtml 与.innertext
  13. myeclipse中配置spring xml自己主动提示
  14. Error:..\FreeRTOS\portable\RVDS\ARM_CM3\port.c,378 Error:..\FreeRTOS\portable\RVDS\ARM_CM3\port.c,378 Error:..\FreeRTOS\portable\RVDS\ARM_CM3\port.c,378 Error:..\FreeRTOS\tasks.c,2806
  15. Linux学习笔记:系统目录结构
  16. 【转】在 XAML 的属性中,转义大括号 {}
  17. LeetCode: Intersection of Two Linked Lists 解题报告
  18. fiddler 面板内显示IP地址
  19. 湖南省第十一届大学生程序设计竞赛:Internet of Lights and Switches(HASH+二分+异或前缀和)
  20. node.js 学习03

热门文章

  1. 二分三元组 CodeForces - 251A
  2. eclipse 中 导入git项目无法导入的问题
  3. Lesnoe Ozero 2017. BSUIR Open 2017
  4. [HDU4669]Editor (栈)
  5. JS对象2
  6. Linux安装nginx详细步骤
  7. shell 环境下MySQL的基本操作指令总结
  8. 【函数式编程】reducer为什么叫reducer
  9. postgresql----JOIN之多表查询
  10. vue发送请求---fetch-jsonp