一: 一对多

  1. 一对多新增

两种方式:  publish = 对象    publish_id = id

  1. publish_id 和 publish 的区别就是:
    1)publish_id 可以手动输入要查询的书籍的出版社 如: 方式一
    2)publish 要查询书籍出版社需要从数据库中取出出版社对象, 如: 方式二

# 一对多新增数据
# 添加一本北京出版社出版的书
# 方式一
ret = Book.objects.create(name='妈妈再爱我一次', price=25, publish_id=1)
print(ret.name) # 方式二, 存对象publish=出版社的对象,存到数据库,是一个id
# publish=Publish.objects.get(id=2)
# publish=Publish.objects.get(pk=2)
# pk 和 id 的作用一样,都是主键,可以通过主键查找,主键只有一个
# 如果用filter 必须在后面加一个 .first()
publish = Publish.objects.filter(pk=2).first() # 从数据里面取出出版社对象
ret = Book.objects.create(name='爸爸再爱我一次', price=35, publish=publish)
print(ret.name)

 2. 一对多修改: 学习了单表操作,新增数据这一些,和修改数据是一个意思

# 一对多修改数据
# 方式一:
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)

  3. 一对多删除: 删除数据就是直接删除就可以了,不过删除大数据要谨慎,能虚就虚,不然就要删库跑路了

二: 多对多

  - 多对多常用的API

    # book_obj.authors.add() 添加
# book_obj.authors.remove() 特定的关联对象从集合中去除, 比如说,移除某书籍的作者
# book_obj.authors.clear() 清空所有书籍的作者
# book_obj.authors.set() 先清空,再设置

 1. 多对多新增,add

 # 多对多新增(书籍跟作者的关系)
# 1. 为妈妈再爱我一次这本书新增一个叫prince, bp 的作者
# prince = Author.objects.filter(name='prince').first() # 拿到作者这个对象
# bp = Author.objects.filter(name='bp').first() # 新增两个作者
book = Book.objects.filter(name='妈妈再爱我一次').first() # 要新增就要查到这本书
# add 添加多个对象 对象用逗号隔开
# book.author.add(prince, bp) # 书籍表的authors
# add 添加作者id
book.author.add(1, 2)

 2. 多对多删除,remove

    # 多对多新增(书籍跟作者的关系)
# prince = Author.objects.filter(name='prince').first() # 拿到作者这个对象
# book = Book.objects.filter(name='妈妈再爱我一次').first() # 要新增就要查到这本书
# # 删除 remove ,可以传对象, 可以传id, 也可以传多个,但不要混着用
# 删除一个叫prince的作者
# book.author.remove(prince)
# book.author.remove(2)
book.author.remove(1, 2)

3. 清空, clear

 # 清空 clear,清空所有,不需要传参数
book.author.clear()

4. 先清空, 在新增 set

 # 先清空,在新增 set ,
book.author.set(2) # 注意: 这样是错误的, 打印时会出现 TypeError: 'int' object is not iterable 这样的错误, 我们必须传一个可迭代的对象出来, 改成下面这样,就可以了
# 要传一个列表,列表内可以是id, 也可以是对象
book.author.set([2, ])

2.

2.

2.

Django day08 多表操作 (二) 添加表记录的更多相关文章

  1. {django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询

    Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...

  2. 百万年薪python之路 -- MySQL数据库之 MySQL行(记录)的操作(二) -- 多表查询

    MySQL行(记录)的操作(二) -- 多表查询 数据的准备 #建表 create table department( id int, name varchar(20) ); create table ...

  3. Excel:一维表和二维表 互转

    一.一维表转二维表 数据源: 一份流水账式的值班表,为了便于打印张贴,现在需要使其变成这样的样式: 也就是从一维表变成传说中的二维表. 1.新建查询 依次单击[数据]→[新建查询] →[从文件]→[从 ...

  4. linux 进阶2--C++读取lua文件中的变量、一维表、二维表

    lua 语言非常灵活,一般把lua 作为脚本文件,会用C++与之进行交互.最重要的是C++代码能读取到脚本中的变量.一维表.二维表. 这样有些参数就可以在lua文件进行更改,而不用重新更改C++代码. ...

  5. Django day08 多表操作 (一) 多表模型创建

    多表模型创建分析:1)作者表:一个作者有姓名和年龄2)作者信息表: 有作者就有信息,点击作者的名字可以查询他的电话和地址, 作者表对应作者信息表,所以他们之间是一对一对的关系3)出版社表: 出版社有对 ...

  6. Django学习笔记(7)——单表操作和多表操作

    单表操作 1,创建模型 创建名为book的APP,在book下的models.py中创建模型: from django.db import models # Create your models he ...

  7. 09 ORM 多表操作,创建表,添加记录

    1.数据库表关系 1.一对多 为什么需要,重复字段太多 一对多关系表 Book id title price publish_id 1 python 100 1 2 php 200 2 3 go 10 ...

  8. Django模型层:单表操作,多表操作,常用(非常用)字段和参数,Django-model进阶

    一.web应用 二.模板的导入与继承 三.静态文件相关 四.inclusion_tag:返回html片段 五.模型层 一.web应用 -s包括两个部分:web服务器+application -目前阶段 ...

  9. Django之model联表:一对多、跨表操作,联表查询

    表结构概述 model.py : class Something(models.Model): name = models.CharField(max_length=32) class UserTyp ...

随机推荐

  1. Eclipse安装egit Github教程

    网址:http://download.eclipse.org/egit/updates 教程: http://jingyan.baidu.com/article/4853e1e529483c1909f ...

  2. CStatic设置位图

    CStatic 用于显示位图 如果要显示图标,则必须要设置窗口属性为 SS_BITMAP 和 SS_CENTERIMAGE,实例代码如下: //获得指向静态控件的指针 CStatic *pStatic ...

  3. ARX中类型强制转换

    比如 克隆 clone, 获得的是一个acrxobject, acrxobject *pobj=pployline->clone(); acdbpolyline *ppoly=acdbpolyl ...

  4. wing ide破解

    LicenseID='CN123-12345-12345-67891' # RequestCode='RL634-8363J-X7E8K-95XD3' RequestCode = 'RW61C-NN6 ...

  5. 我的FPGA

    转眼间我都工作三个年头了,这两年多时间我一直从事着FPGA测试工作,从一开始的懵懂无知,到现在的些许理解,我想记录和分享我对FPGA测试的理解. 之所以选择在博客园写这样,是我发现在这里阅览文章不需要 ...

  6. Coefficient Computation (大整数、Java解决)

    Coefficient Computation UVALive8265 题意:计算组合数C(n,k)的值并将值按给定的进制输出. 思路:Java大整数类硬上. PS:刚刚学完Java的大整数类,结果却 ...

  7. B树、B+树

    when ? why ? how ? what ? 平衡二叉树其查找的时间复杂度是 O(log2N)与树的深度相关,那么降低树的深度自然会提高查找效率. 如果我们要操作的数据集非常大,大到内存已经没法 ...

  8. OpenCV 基于超像素分割的图像区域选取方法及源码

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51386993 工程源码GitHub: ...

  9. 剖析Spark-Shell

    打开spark-shell,我们可以看到 function main() { if $cygwin; then stty -icanon min 1 -echo > /dev/null 2> ...

  10. [Poj2112][USACO2003 US OPEN] Optimal Milking [网络流,最大流][Dinic+当前弧优化]

    题意:有K个挤奶机编号1~K,有C只奶牛编号(K+1)~(C+K),每个挤奶机之多能挤M头牛,现在让奶牛走到挤奶机处,求奶牛所走的最长的一条边至少是多少. 题解:从起点向挤奶机连边,容量为M,从挤奶机 ...