一对多

1、添加记录

 #publish_id=2Book.objects.create(name="Python进阶",price=77,pub_date="2019-12-12",publish_id=2)#publish=object
Book.objects.create(name="GO",price=23,pub_date="2017-05-12",publish=publish_obj)

2、通过对象查询记录

#正向查询:
book_obj=Book.objects.get(name="python进阶")
pub_obj=book_obj.publish----》书籍对象对应的出版社对象
pub_obj.name
#反向查询:
pub_obj = Publish.objects.filter(name="人民出版社")[0]
pub_obj.book_set.all().values("name","price")

3、通过filter查询记录(filter values 双下划线__)

 #人民出版社出版过的书籍与价格
ret=Book.objects.filter(publish__name="人民出版社").values("name","price")#python这本书出版社的名字
ret2=Publish.objects.filter(book__name="python进阶").values("name")#python这本书出版社的名字
ret3=Book.objects.filter(name="python").values("publish__name")#北京的出版社出版书的名字
ret4=Book.objects.filter(publish__city="北京").values("name")#2019年上半年出版过书的出版社的名字
ret5=Book.objects.filter(pub_date__lt="2019-07-01",pub_date__gt="2017-01-01").values("publish__name")

多对多

1、创建多对多的关系 author= models.ManyToManyField(“Author”)(推荐)

2、书籍对象它的所有关联作者 obj=book_obj.authors.all()
绑定多对多的关系 obj.add(*QuerySet)
obj.remove(author_obj)

3、如果想向第三张表插入值的方式绑定关系: 手动创建第三张表

                        # class Book_Author(models.Model):#     book=models.ForeignKey("Book")#     author=models.ForeignKey("Author")                    Book_Author.objects.create(book_id=2,author_id=3)

4、练习


#查询人民出版社出过的所有书籍名字和价格#方式一:
pub_obj=Publish.objects.filter(name="人民出版社")[0]
ret=Book.objects.filter(publish=pub_obj).values("name","price")
print(ret)#方式二
pub_obj = Publish.objects.filter(name="人民出版社")[0]
print(pub_obj.book_set.all().values("name","price"))
print(type(pub_obj.book_set.all()))#方式三:调用publish外键字段
ret=Book.objects.filter(publish__name="人民出版社").values("name","price")
print(ret)#python这本书出版社的名字
ret2=Publish.objects.filter(book__name="python").values("name")
print(ret2)
ret3=Book.objects.filter(name="python").values("publish__name")
print(ret3)ret4=Book.objects.filter(publish__city="北京").values("name")
print(ret4)ret5=Book.objects.filter(pub_date__lt="2017-07-01",pub_date__gt="2017-01-01").values("publish__name")
print(ret5)#通过对象的方式绑定关系
book_obj=Book.objects.get(id=3)
print(book_obj.authors.all())
print(type(book_obj.authors.all()))author_obj=Author.objects.get(id=2)
print(author_obj.book_set.all())book_obj=Book.objects.get(id=3)
author_objs=Author.objects.all()
book_obj.authors.add(*author_objs)
book_obj.authors.remove(*author_objs)
book_obj.authors.remove(4)#创建第三张表
Book_Author.objects.create(book_id=2,author_id=2)obj=Book.objects.get(id=2)
print(obj.book_author_set.all()[0].author)

Python框架篇之Django(Models的多表操作)相关推荐

  1. Python框架篇之Django(Models数据表的创建、数据库配置)

    文章目录 一.数据库的配置 二.Models数据表的创建 三.在Pycharm中显示 一.数据库的配置 1. django默认支持 sqlite,mysql, oracle,postgresql数据库 ...

  2. Python框架篇之Django(基本流程、命令行、配置文件)

    文章目录 一.总述 二.Django的实现流程 三.django的命令行 四.配置文件(settings) 1.MEDIA_ROOT和MEDIA_URL 2.STATIC_ROOT和STATIC_UR ...

  3. Python框架篇之Django(Django项目搭建全过程、Web框架与Django)

    文章目录 一.Web框架与Django本质 二.从安装到实现一个完整的Django项目 一.Web框架与Django本质 1.Web框架的理解 框架,特指为解决一个开放性问题而设计的具有一定约束性的支 ...

  4. Python框架篇之Django(路由系统URL、视图函数views)

    文章目录 一.路由系统(URL) 二.视图函数(views) 一.路由系统(URL) 1.URL配置 (URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用 ...

  5. Python框架篇之Django(ORM对象关系映射)

    文章目录 一.认识ORM 二.模型常用字段类型 三.数据表的增删改查 四.配置日志 一.认识ORM 1.概念:简单来说,就是用面向对象的方式去操作数据库的创建表以及增删改查等操作. 2.ORM的优点 ...

  6. Python框架篇之Django(Template模版:标签tag、自定义filter、extend模板继承)

    文章目录 一.标签的使用(tag) 二.自定义filter和simple_tag 三.extend模板继承 一.标签的使用(tag) 1.语法格式:{% tags %} 2.提供的几种标签 {% if ...

  7. Python框架篇之Django(Template基础:模板语法、过滤器filter)

    文章目录 一.Template介绍 二.模板语法 三.过滤器(filter) 一.Template介绍 Python 代码编写和 HTML 设计是两项不同的工作,大多数专业的网站开发环境都将他们分配给 ...

  8. 单选选择才可以提交_第二篇:DJANGO开发产品选择表amp;调查问卷

    锅大虾:第一篇:DJANGO开发产品选择表&调查问卷​zhuanlan.zhihu.com 三.调查问卷部分 前端实现效果:首页 首页效果图 需求: 1.单项.多项选择,并且随意增加" ...

  9. python——Django(ORM连表操作)

    千呼万唤始出来~~~当当当,终于系统要写django的ORM操作啦!!!这里记录的是django操作数据库表一对多.多对多的表创建及操作.对于操作,我们只记录连表相关的内容,介绍增加数据和查找数据,因 ...

最新文章

  1. 剑指offer:面试题10- II. 青蛙跳台阶问题
  2. 【java下午茶系列】java三重奏之封装
  3. python3 文件 复制、重命名、移动、删除
  4. 数学公式识别神器—Mathpix Snip
  5. python爬虫代码房-小白学习python爬虫,分享一下代码,伪链家全站。
  6. LayoutInflate部分源码解析
  7. (资源整理)带你入门Spark
  8. linux查找设备所在分片,Linux设备驱动统一模型解析
  9. python将一个列表里面的某类元素取出来_03|Python列表常见操作
  10. Portal-Basic Java Web 应用开发框架:应用篇(十四) —— 异步 Action
  11. 好奇怪呀后面加什么标点_沙发位后面是窗户有什么好的方案?
  12. linux内核api作用,内存管理 – Linux内核API get_unmapped_area
  13. 由115网盘取消大众分享功能说起
  14. 【shell】shel脚本开发-条件测试
  15. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
  16. dva的用法_dva基本用法
  17. 服务中读取当前用户注册表HKEY_CURRENT_USER
  18. php期末大作业可以做什么,期末要交一个基于php连入数据的大作业
  19. HAL库STM32CuBe实现按键扫描芯片STM32F407
  20. IDEA使用手记——IDEA主菜单恢复

热门文章

  1. android otg读取索尼相机usb_OTG是何物,手机的OTG功能还有存在的必要么?
  2. 毫秒转换友好的显示格式【刚刚、几秒前,几小时,几天前(3天内) 时间格式化】
  3. 简单的动态网站java,Java实践:一个简单的动态数组实现
  4. ajax获得excel文件流在前端打开_Javascript前端开发:jsonp的原理你真的懂吗?
  5. ssm框架mysql自增_手把手教你整合最优雅SSM框架
  6. java importgeopoint_Java GeoPoint.project方法代碼示例
  7. 登录自动填密码php,192 实现自动登录无限路由器后台管理网页,可以记住自己输入的密码 WEB(ASP,PHP,...) 238万源代码下载- www.pudn.com...
  8. java clone concurrentlinkedqueue_java – ConcurrentLinkedQueue代码解释
  9. linux用usermod修改密码,Linux笔记(usermod命令,用户密码管理,mkpasswd)
  10. java代码启动spring_javascript - 从JavaScript调用Java代码( Spring 启动)