https://www.cnblogs.com/liuqingzheng/articles/9499252.html

 # 一对多新增数据
添加一本北京出版社出版的书
第一种方式
ret=Book.objects.create(name='红楼梦',price=34.5,publish_id=1)
print(ret.name)
第二种方式,存对象publish=出版社的对象,存到数据库,是一个id
publish=Publish.objects.get(id=1)
pk是主键,通过主键查找
publish=Publish.objects.get(pk=1)
publish = Publish.objects.filter(pk=2).first()
ret = Book.objects.create(name='西游记', price=34.5, publish=publish)
print(ret.name)
一对多修改数据
book=Book.objects.get(pk=1)
# book.publish=出版社对象
book.publish_id=2
book.save()
# 方式二
book=Book.objects.filter(pk=1).update(publish=出版社对象)
book=Book.objects.filter(pk=1).update(publish_id=1)
多对多新增
为红楼梦这本书新增一个叫lqz,egon的作者
lqz=Author.objects.filter(name='lqz').first()
egon=Author.objects.filter(name='egon').first()
book=Book.objects.filter(name='红楼梦').first()
# add 添加多个对象
book.authors.add(lqz,egon)
add添加作者id
book.authors.add(1,2)
删除 remove,可以传对象,可以传id,可以传多个,不要混着用
book.authors.remove(lqz)
book.authors.remove(2)
book.authors.remove(1,2)
clear清空所有
book.authors.clear()
set,先清空,在新增,要传一个列表,列表内可以是, id,也可以是对象
book.authors.set([lqz,])
********这样不行,因为它打散了传过去了,相当于book.authors.set(lqz)
book.authors.set(*[lqz,]) lqz=Author.objects.filter(name='lqz')
print(type(lqz))
from django.db.models.query import QuerySet
# ***************************基于对象的跨表查询
'''
一对一
正向 author---关联字段在author--->authordetail ------> 按字段
反向 authordetail------关联字段在author--->author -----> 按表名小写 '''
查询lqz作者的手机号 正向查询
author=Author.objects.filter(name='lqz').first()
# author.authordetail 就是作者详情的对象
authordetail=author.authordetail
print(authordetail.phone)
查询地址是 :山东 的作者名字 反向查询
authordetail=AuthorDetail.objects.filter(addr='山东').first()
# authordetail.author 这是作者对象
author=authordetail.author
print(author.name) #一对多
'''
一对多
正向 book---关联字段在book--->publish ------> 按字段
反向 publish------关联字段在book--->book -----> 按表名小写_set.all()
'''
正向 查询红楼梦这本书的出版社邮箱
book=Book.objects.filter(name='红楼梦').first()
# book.publish 就是出版社对象
pulish=book.publish
print(pulish.email)
反向 查询地址是北京 的出版社出版的图书
publish=Publish.objects.filter(addr='北京').first()
# publish.book_set.all() 拿出所有的图书
books=publish.book_set.all()
# 统计一下条数
books=publish.book_set.all().count()
print(books) '''
多对多
正向 book---关联字段在book--->author ------> 按字段.all()
反向 author------关联字段在book--->book -----> 按表名小写_set.all()
'''
#查询红楼梦这本书所有的作者
book=Book.objects.filter(name='红楼梦').first()
book.authors.all() #是所有的作者,是一个queryset对象,可以继续点
print(book.authors.all()) 查询lqz写的所有书
lqz=Author.objects.filter(name='lqz').first()
books=lqz.book_set.all()
print(books) 连续跨表
查询红楼梦这本书所有的作者的手机号
book=Book.objects.filter(name='红楼梦').first()
authors=book.authors.all()
for author in authors:
authordetail=author.authordetail
print(authordetail.phone) # ****************************基于对象的查询---是子查询也就是多次查询
# ***************基于双下划线的查询*****
# 一对一
查询lqz作者的手机号 正向查询 跨表的话,按字段
以author表作为基表
ret=Author.objects.filter(name='lqz').values('authordetail__phone')
print(ret)
以authordetail作为基表 反向查询,按表名小写 跨表的话,用表名小写
ret=AuthorDetail.objects.filter(author__name='lqz').values('phone')
print(ret)
查询lqz这个作者的性别和手机号
正向
ret=Author.objects.filter(name='lqz').values('sex','authordetail__phone')
print(ret)
查询手机号是13888888的作者性别
ret=Author.objects.filter(authordetail__phone='').values('sex')
print(ret)
ret=AuthorDetail.objects.filter(phone='').values('author__sex')
print(ret)

django之多表查询与创建的更多相关文章

  1. Django开发之路 二(django的models表查询)

    django的models表查询 一.单表查询 (1) all(): 查询所有结果 # 返回的QuerySet类型 (2) filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 #返 ...

  2. 第五章、Django之多表查询进阶与事务

    目录 第五章.Django之多表查询 一.聚合查询 二.分组查询 三.F与Q查询 四.查询优化 五.Django开启事务 六.自定义char字段 七.ORM常用字段 第五章.Django之多表查询 一 ...

  3. Django 之多表查询 与多表的使用

    1.django的多表查询 主要区分为: 正向查询    逆向查询 1. 多表查询: 是一个复杂的查询,他分为对象查询和__模糊查询两种方式 2. 多表查询: 又分为 一对一查询, 一对多查询, 多对 ...

  4. django之跨表查询及添加记录

    一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出 ...

  5. Django框架----跨表查询及添加记录

    一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出 ...

  6. django之多表查询

    一.创建模型 在Models创建如下模型: from django.db import models # Create your models here. # 用了OneToOneField和Fore ...

  7. django之单表查询

    一.创建表 1.创建模型: 创建名为book的app,在book下的models.py中创建模型: from django.db import models # Create your models ...

  8. Django ORM多表查询练习

    ORM多表查询 创建表结构: from django.db import models # 创建表结构 # Create your models here. class Class_grade(mod ...

  9. django之多表查询-2

    2018-11-14 一 \\ 基于双下划线的跨表查询: 套路一样,用__跨表 -一对多 -多对多 from app.models import * 查询出版社为北京出版社出版的所有图书的名字,价格 ...

随机推荐

  1. 爱国者布局智能硬件,空探系列PM2.5检測仪“嗅霾狗”大曝光

        随着6月1日史上最严禁烟令的正式实施,国内包含北京.上海.成都等大中型城市已经在公共场所全面禁烟.众所周知,实施禁烟令的根本在于促进空气的净化,实现环境的改善,要达到这个目的,光有禁烟令是远远 ...

  2. Ubuntu 的 apt-get 代理设置(zhuan)

    url: http://qixinglu.com/post/ubuntu_apt-get_proxy_setup.html 升级到 Ubuntu10.04 后,发现 apt-get 的代理设置有改变了 ...

  3. CSRF学习笔记之CSRF的攻击与防御以及审计【00x1 】

    +++++++++++++++++++++++++++ + 00x1 实现简单的攻击 + 00x2 代码审计漏洞的源头 +++++++++++++++++++++++++++ 00x1 简单的csrf ...

  4. 【Mac + Appium + Python3.6学习(六)】之安装Android模拟器(Genymotion)并运行模拟器进行自动化

    环境: MacOS:10.13.6 Virtualbox:5.2.22 Genymotion:genymotion-2.12.2 本文Virtualbox.Genymotion下载地址: 链接:htt ...

  5. CentOS全自动一键安装PHP,MySQL,phpmyadmin与Nginx

    运行install_nginx.sh即可 1,需要修改install_nginx.sh中的相应路径: #存放源代码和本脚本的目录 compile_dir=/root/nginx_compile,需要修 ...

  6. jQuery特效:图片的轮播

    Flexslider图片轮播.文字图片相结合滑动切换效果 地址:http://www.helloweba.com/view-blog-265.html 示例:http://www.helloweba. ...

  7. asp.net 读取配置文件方法

    方法1: System.Collections.Specialized.NameValueCollection nvc = (System.Collections.Specialized.NameVa ...

  8. mysql_real_connect 端口号说明

    mysql_real_connect语法:  C++ Code  12345678   MYSQL * mysql_real_connect(MYSQL * mysql,                ...

  9. 【C语言天天练(二)】预处理

    引言: 学C语言之初.一提到预处理,脑子里想到的就是#define的宏定义以及#include包括的头文件.后来随着对C的深入学习发现.预处理不止这些.比方条件编译.提前定义的宏等等.以下对此进行总结 ...

  10. 怎样从Mysql官网下载mysql.tar.gz版本的安装包

     今天学习在Linux上部署项目,用到了Mysql,因此想要下载适用于Linux的安装版本,在Mysql官网找了半天,终于找到怎样下载了,这里写出来,以后大家找的时候就好找了. 第一步:在百度输入My ...