Django day08 多表操作 (二) 添加表记录
一: 一对多
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 多表操作 (二) 添加表记录的更多相关文章
- {django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...
- 百万年薪python之路 -- MySQL数据库之 MySQL行(记录)的操作(二) -- 多表查询
MySQL行(记录)的操作(二) -- 多表查询 数据的准备 #建表 create table department( id int, name varchar(20) ); create table ...
- Excel:一维表和二维表 互转
一.一维表转二维表 数据源: 一份流水账式的值班表,为了便于打印张贴,现在需要使其变成这样的样式: 也就是从一维表变成传说中的二维表. 1.新建查询 依次单击[数据]→[新建查询] →[从文件]→[从 ...
- linux 进阶2--C++读取lua文件中的变量、一维表、二维表
lua 语言非常灵活,一般把lua 作为脚本文件,会用C++与之进行交互.最重要的是C++代码能读取到脚本中的变量.一维表.二维表. 这样有些参数就可以在lua文件进行更改,而不用重新更改C++代码. ...
- Django day08 多表操作 (一) 多表模型创建
多表模型创建分析:1)作者表:一个作者有姓名和年龄2)作者信息表: 有作者就有信息,点击作者的名字可以查询他的电话和地址, 作者表对应作者信息表,所以他们之间是一对一对的关系3)出版社表: 出版社有对 ...
- Django学习笔记(7)——单表操作和多表操作
单表操作 1,创建模型 创建名为book的APP,在book下的models.py中创建模型: from django.db import models # Create your models he ...
- 09 ORM 多表操作,创建表,添加记录
1.数据库表关系 1.一对多 为什么需要,重复字段太多 一对多关系表 Book id title price publish_id 1 python 100 1 2 php 200 2 3 go 10 ...
- Django模型层:单表操作,多表操作,常用(非常用)字段和参数,Django-model进阶
一.web应用 二.模板的导入与继承 三.静态文件相关 四.inclusion_tag:返回html片段 五.模型层 一.web应用 -s包括两个部分:web服务器+application -目前阶段 ...
- Django之model联表:一对多、跨表操作,联表查询
表结构概述 model.py : class Something(models.Model): name = models.CharField(max_length=32) class UserTyp ...
随机推荐
- js弹开页面并调用方法
每次重新写一个功能的时候,都能发现以前写的并不太好,都可以改进,奇怪的是我还是我,为什么曾经的我就想不起来要这么写,比如下面两段代码 历史代码: if (infoTablePage != null) ...
- eclipse版本和jdk的版本兼容问题
eclipse也是有版本的,当版本过低时,无法兼容高版本的jdk 项目中用的是jdk1.8,但是低版本的eclipse只能选到jdk1.7,导致java文件在编译的过程中,不识别1.8版本jdk的语法 ...
- vue上传阿里云图片组件
首先需要弄一个阿里云存储.然后配置一下.前端就可以直接上传图片并回显.可在父级组件定义上传图片类型以及大小.默认为500kb.样式可以自适应调整. <template> <div c ...
- eclipse 下使用 git
一.默认仓库文件夹 二.window -->perspective --> customize perspective 三.提交时,要忽略的文件
- C++ primer chapter 12
动态内存:之前的程序使用对象有着严格定义的生存期,会自动销毁.C++支持动态分配对象,动态分配对象的生存期和他们在哪里创建是无关的,只有当显式的被释放,这些对象才会销毁.标准库定义了智能指针对象可以自 ...
- EF--model is being created异常
使用EF的时候出现了下面的异常,我使用了TASK和saveChangeAsync()异步 The context cannot be used while the model is being cre ...
- 洛谷 P2965 [USACO09NOV]农活比赛The Grand Farm-off
P2965 [USACO09NOV]农活比赛The Grand Farm-off 题目描述 Farmer John owns 3*N (1 <= N <= 500,000) cows su ...
- Javascript中数据与字符串互转(转)
数组与字符串的相互转化 <script type="text/javascript"> var obj="new1abcdefg".replace( ...
- git tag打标签常用命令
# 创建轻量标签$ git tag v0.1.2-light 切换到标签 与切换分支命令相同,用git checkout [tagname]查看标签信息用git show命令可以查看标签的版本信息:$ ...
- AngularJS:让submit重新生效
当我们在html中声明了ng-app后,form的submit就会失效,必须通过angularJS来处理.如果这时还是想用普通的方式提交的话,需要修改form标签,如下所示: <form met ...