添加表记录

一对多:

    # 方式1:publish_obj = Publish.objects.get(id=1)Book.objects.create(name='2号图书',price=200,publishs=publish_obj)# 方式2:Book.objects.create(name='3号图书',price=300,publish_id=1)

多对多:

    book_obj = Book.objects.filter(name='2号图书').first()author1_obj = Author.objects.get(name='1号作者')author2_obj = Author.objects.get(name='2号作者')book_obj.authors.add(author1_obj,author2_obj)

查询表记录

  • 方式1:基于对象
  • 方式2:基于双下划线

一对一:

    # 反向查询# 方式1:author_detail_list = AuthorDetail.objects.filter(addr='地址')for obj in author_detail_list:print(obj.author.name)# 方式2:AuthorDetail.objects.filter(author__name='2号作者').values("addr")# 正向查询# 方式1:Author.objects.filter(name='1号作者').first().authordetail.addr# 方式2:Author.objects.filter(name='1号作者').values("authordetail__addr")

一对多:

# 正向查询(按字段)
# 方式1:
# 查询1号图书的出版社名字
Book.objects.filter(id=1).first().publishs.name
# 方式2:
# 查询1号图书的出版社名字和地址
Book.objects.filter(id=1).values_list("publishs__name","publishs__addr")# 反向查询(按表名:表名_set)
# 方式1:
# 查询1号出版社出版的所有书籍
Publish.objects.get(name='1号出版社').book_set.all()
# 方式2:
# 查询1号图书的出版社的名字和地址
Publish.objects.filter(book__id = 1).values_list("name","addr")

多对多:

  同一对多

聚合查询:

  aggregate(*args, **kwargs)

    返回一个字典,键为聚合值的标识符,可以自由指定,也可以不指定

  example:

# 不指定键
Book.objects.all().aggregate(Avg("price"))
# 指定键
Book.objects.all().aggregate(price_avg = Avg("price"))

分组查询:

  example:

    # 单表# ret = Book.objects.values("price").annotate(Count("id"))# 多表ret = AuthorDetail.objects.values("addr").annotate(c  = Count("author")).values("addr","c")# 多表分组等同于join关联表,再分组查询

F查询:

  进行字段值之间的比较,支持对象与常数之间,对象与对象之间的加减乘除和取模运算。

  example:

from django.db.models import F
# 查询阅读数量大于浏览数量的
Book.objects.filter(readNum__lt=F('scanNum'))

Q查询:

  支持与、或、非及其它复杂查询,可以与关键字参数一起使用,但Q对象要放在前面

  example:

from django.db.models import Q
Book.objects.filter(Q(authors__name="2号作者")|Q(authors__name="1号作者"))

转载于:https://www.cnblogs.com/shannen/p/11285154.html

Django模型层(models.py)之多表操作相关推荐

  1. 54 Django 模型层(1) 单表查询

    单表操作: 一 项目的操作顺序: 1 在model.py文件中创建表结构 class Book(models.Model): id=models.AutoField(primary_key=True) ...

  2. 3.1.8 Django模型层详细应用

    在这里肯定有小伙伴会说,前面不是已经引用了模型层了吗?并且在模型层中完成了数据库的操作了呀,为什么还要讲模型层? 首先呢,前面属于我们最传统的处理方式,那种方式过于麻烦,无法很好处理数据.模型层真正应 ...

  3. python代码函数字符查询宝典书籍_Django基础五之django模型层(一)单表操作

    二 单表操作 一.创建表 创建模型 创建名为book的app,在book下的models.py中创建模型: from django.db importmodels#Create your models ...

  4. Django基础五之Django模型层(二)多表操作

    Django基础五之Django模型层(二)多表操作 一 创建模型 表和表之间的关系 一对一.多对一.多对多 # 作者表 比较常用的信息放在这个表中 class Author(models.Model ...

  5. Django 模型层(models) 复杂查询详解

    Django 模型层(models) 复杂查询详解 一般Django orm 和原生sql混合使用 1.测试文件 只单独测试django中的某一个py文件 不一定是tests.py 1.配置 在任意一 ...

  6. django 使用原生SQL语句反向生成MODELS.PY中的表结构

    在一次工作中,有这么一个问题,就是要导入的数据字段不确定,但是还想使用django的ORM来对数据进行操作.. 琢磨了许久,弄个不完善的方案,但功能是能实现的,主要是思路.废话不多说了,丑陋的展示一下 ...

  7. Web开发-Django模型层

    Django模型层 简述 Django框架处理业务的逻辑一般如下(省略图,源于网络,侵删) 可以看到,Django自带了一套ORM机制,这也是Django框架的核心-"全面",将一 ...

  8. Django–模型层orm查询

    文章目录 Django–模型层orm查询 一.单表查询(增.删.改.查) 基本查询 下划线查询 二.外键字段(增.删.改.查) 一对多 多对多 三.多表查询 多表查询的方式 正反向的概念 基于对象的跨 ...

  9. 第三百零九节,Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、并且——queryset对象序列化...

    第三百零九节,Django框架,models.py模块,数据库操作--F()和Q()运算符:|或者.&并且 F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from dj ...

最新文章

  1. linux-glibc内存管理小结2(内存相关系统调用的实现)
  2. 网站安全测试工具GoLismero
  3. ios tableview分组间距
  4. 毕业后五年拉开差距的原因在哪里
  5. 【数据结构与算法】之深入解析“旋转链表”的求解思路与算法示例
  6. 3.1 go context代码示例
  7. json php 数组读写,PHP如何将数据写入JSON?
  8. zblog广告小小插件 - ZblogPHP插件
  9. PHP中||与or的区别
  10. php 5.4.5,PHP 5.4.5 和 5.3.15 发布
  11. 我们为什么要使用NodeJS
  12. springboot整合mysql数据库_springBoot 集成Mysql数据库
  13. 01 Python pikepdf 解锁带有密码的PDF文件
  14. html 媒体查询改变字体,CSS----媒体查询设置根节点字体大小
  15. 由加速度计解算得到姿态角
  16. 使用Pyton将MAC地址转换成指定格式
  17. APMServ启动失败解决方法
  18. 为你的个人博客添加访客地图
  19. Spring注解开发学习笔记
  20. Microsoft公司 .CAB文件格式

热门文章

  1. ionic4 手机启动页进入首页慢问题修改
  2. 简述基于EDA技术的FPGA设计
  3. 5G有多恐怖?几秒钟可下载整部电影
  4. Asp中解决AJAX乱码问题
  5. 《JAVA课程设计》实训第四天——《猜猜看》游戏
  6. Java Web(5) Spring 下使用Junit4 单元测试
  7. 司机和售票员问题 信号signal注册一例
  8. be sure to bring water with you while studying
  9. journal of systems science and complexity
  10. matlab Normally distributed random numbers in two columns