一、多对多的正反向查询

class Class(models.Model):name = models.CharField(max_length=32,verbose_name="班级名")course = models.CharField(verbose_name="课程",max_length=32)def __str__(self):return self.nameclass Teacher(models.Model):name = models.CharField(max_length=23,verbose_name="姓名")classes = models.ManyToManyField(verbose_name="所属班级",to="Class")def __str__(self):return self.name

题目1:查找娜娜老师所带的班级

        # 方式一:基于对象的查找obj = models.Teacher.objects.filter(name="娜娜").first()print(obj.classes.all())print("娜娜老师带的班级",obj.classes.values("name"))# 方式二:基于双下划线的查找obj_cls = models.Teacher.objects.filter(name="娜娜").values("classes__name")print("娜娜老师带的班级",obj_cls)

注意:要说明的是多对多的查询用.all,,查单个的时候用.values或者values_list,不要用obj.classes.name,,这样查到的会是None,反向查询也是如此。我就是犯了这样的错,引以为戒。。

总结:不管是一对多,还是多对多,要是查询多得一方就得用all()

运行结果截图:

表结构:

from django.db import models# Create your models here.
# 一个学生有一个班级,一个班级可以有好多学生,所以是
# 一对多的关系,关联字段放在多的一方
class Student(models.Model):name = models.CharField(max_length=32,verbose_name="姓名")age = models.IntegerField(verbose_name="年龄")classes = models.ForeignKey(to="Class",verbose_name="所属班级")def __str__(self):return self.nameclass Class(models.Model):name = models.CharField(max_length=32,verbose_name="班级名")course = models.CharField(verbose_name="课程",max_length=32)def __str__(self):return self.nameclass Teacher(models.Model):name = models.CharField(max_length=23,verbose_name="姓名")classes = models.ManyToManyField(verbose_name="所属班级",to="Class")def __str__(self):return self.name

2、查询海燕在那个班级

  # 方式一:print("海燕所在的班级",models.Student.objects.filter(name="海燕").values("classes__name"))# 方式二:obj_cls = models.Student.objects.filter(name="海燕").first()print("海燕所在的班级",obj_cls.classes.name)

3、查询海燕所在班的老师的姓名

  print("海燕所在班的老师的姓名",models.Student.objects.filter(name="海燕").values("classes__teacher__name"))

4、查询软件测试151班的所有学生的姓名

 print("软件测试151班的所有学生的姓名",models.Class.objects.filter(name="软件测试151").values("student__name"))obj = models.Class.objects.filter(name="软件测试151").first()# print("软件测试151班的所有学生的姓名",obj.student_set.name)  #这样打印的结果是Noneprint("软件测试151班的所有学生的姓名",obj.student_set.all().values("name"))

二、需要掌握的一个很重要的知识点

1、form表单中要用submit,如果用button切记要加上type,不然button默认的type是submit,会有影响

  <button class="login" type="button">注册</button>

<button type="button" οnclick="doValidation();">提交</button>
<input type="button" οnclick="doValidation();" value="提交"/>
上面两种写法是对的,功能一样。<button οnclick="doValidation();">提交</button>
如果写成这种,默认为submit,本来doValidation方法里有提交功能了,
再加上按钮也是提交功能,会提交两次。所以使用按钮时最好指定type类型。

转载于:https://www.cnblogs.com/xiaohema/p/8456307.html

Django 【补充】ORM多对多正向查询相关推荐

  1. Django之ORM(多对多)

    一.ManyToManyField 1.class RelatedManager "关联管理器"是在一对多或者多对多的关联上下文中使用的管理器. 它存在于下面两种情况: 外键关系的 ...

  2. Django数据库ORM模型使用(数据查询)!!!Django数据库如何使用ORM模型查询数据? ✧*。٩(ˊᗜˋ*)و✧*。 Django初体验

    文章目录 查询方法 查看执行的SQL语句 查询条件 精准与模糊查询 比较条件 时间条件 聚合函数 Avg:求平均值. Count:获取指定的对象的个数. Max和Min:获取指定对象的最大值和最小值. ...

  3. Django中ORM之或语句查询

    比如数据库表中有显示器1和显示器2,那么如何在django中模糊查询出显示器1和显示器2呢 首先导入模块 from django.db.models import Qclass GetDisplay( ...

  4. Django之orm查询

    ORM相关 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的 ...

  5. django orm关联查询_django中orm的多表查询

    一.创建模型 下面我们通过图书管理系统,来设计出每张表之间的对应关系. 通过上图关系,来定义一下我们的模型类. from django.db import models class Book(mode ...

  6. Django中ORM操作

    一.ORM简介 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. ​ 简单的说,ORM是通过使用描述对象 ...

  7. django orm级联_第19天,Django之ORM进阶续

    目录 一. 基于对象的跨表查询 1.1 一对多查询(Book与Publish) 1.2 一对一查询(Author与AuthorDetail) 1.3 多对多查询(Author与Book) 1.3.1 ...

  8. django orm querset 多表查询

    一对多 or 一对一 前提条件: name = models.ForeignKey(Product, on_delete=models.CASCADE, related_name="ps&q ...

  9. Django中的ORM操作之高级查询aggregate和annotate方法

    Django中的ORM操作之高级查询aggregate和annotate方法 aggregate()方法详解 annotate()方法详解 aggregate和annotate应用场景 Django中 ...

最新文章

  1. .NET中如何得到图片大小
  2. 网站初学笔记3-HTML实用元素5
  3. linux操作系统上网,linux操作系统下无法上网
  4. I.MX6ULL镜像文件
  5. UVA-806 Spatial Structures (四分树)
  6. 【JAVASCRIPT】表单序列化问题
  7. Codeforces1142D
  8. c语言 freopen txt_C语言:freopen函数
  9. 如何根据进程号去查端口号?
  10. 通过kubeadm的方式以及二进制包的方式安装k8s的对比总结---K8S_Google工作笔记0016
  11. x=min(x, y)
  12. 现代web数据传输技术及数据格式
  13. Matlab绘图相关参数备忘录
  14. 华为这次是给所有企业挡了子弹
  15. GitHub上重要的几个搜索技巧
  16. u盘格式化后如何恢复数据,三步轻松恢复!
  17. 数学与神经网络关系大吗,神经网络与算法的关系
  18. snmp4j使用v3连接报异常:Message processing model 3 returned error: Unknown security name
  19. RT-Thread Studio使用笔记(五):I2C设备及AT24C256的使用
  20. 案例 局部获取坐标位置 和全局获取坐标位置

热门文章

  1. 这才是智能手表该有的样子 HUAWEI WATCH 2评测
  2. 给CenOS7虚拟机扩容
  3. 为什么只需要一个eden而需要两个survivor?
  4. 和6岁孩子的函数式编程对话
  5. Apache RocketMQ 的 Service Mesh 开源之旅
  6. Java 最坑爹的 10 大功能点!
  7. 蚂蚁面试:字符串在JVM中如何存放?
  8. 看到了商机,为什么赚不到钱?
  9. Failure while trying to resolve exception [org.springframework.http.converter.HttpMessageNotWritabl
  10. t66y.buzz index.php,6.FizzBuzz