Python学习---django多对多之Djanog默认表学习
案例一:
from django.db import models
class Book(models.Model):
name = models.CharField(max_length=33)
# 创建数据,当然不在此处设置,制只做示例演示
# models.Book.objects.create(name='书名') class Author(models.Model):
name = models.CharField(max_length=33)
# Django此时帮我们生成第三张表
# 因为没有单独的第三张表的类,所以需要我们间接的操作
# 通过Book,Author都可以进行操作
m = models.ManyToManyField("Book") # 形同虚设,跟Book,Author表都没关系
# 创建数据,当然不在此处设置,制只做示例演示
# models.Author.objects.create(name='人名') # 正向查找数据[先找到人后根据obj.m查找书名]
# 查询一: 消耗内存
author_obj = models.Author.objects.get(id=1)
author_list = author_obj.m.all() # 获取这个人所写的全部书
for author in author_list: # 需要多次查找数据库,很消耗内存
print(author.name, author.m.all())
# 查询二: 联表一次查询所有的数据
author_obj = models.Author.objects.values("id", "m", "name") # 里面有m这个外键属性
author_obj2 = models.Author.objects.values("id", "m", "m__name" "name") # m可以联表取值
for item in author_list:
# 查询到全部跟作者有关的书的ID[第三张表关联的就是ID]
print(item['id'], item['name'], '书籍ID:', item['m'])
# 反向查找数据
book_obj = models.Book.objects.get(id=1) # 先查找到书
book_obj.author_set.all() # 间接关联第三张表,查找书的作者 # 数据的添加
# 正向增加
obj = models.Author.objects.get(id=1)
obj.m.add("可以添加Book的对象") # 不推荐,因为多了一次的查询次数
obj.m.add(5) # 第三张表中添加数据[对应关系,表示obj对象关联了M表中id=5这个Book对象]
obj.m.add(5, 6) # 第三张表中添加数据[对应关系,表示obj对象关联了M表中id=5/6这个Book对象]
obj.m.add(*[4, 5]) # 第三张表中添加数据[对应关系,表示obj对象关联了M表中id=4/5这个Book对象] # 数据的删除
obj = models.Author.objects.get(id=1)
obj.m.remove(5)
obj.m.remove(5, 6)
obj.m.remove(*[5, 6]) # 数据的清空
obj = models.Author.objects.get(id=1)
obj.m.clear() # 清空obj对象关联的所有数据 # 数据的更新
obj = models.Author.objects.get(id=1)
# 必须是迭代对象
obj.m.set([1, ]) # 此时将book_id设置为1, author_id设置为1[因为获取的Author的ID是1]
# set里面的值数据库内有则保留,没有则删除
obj.m.set([1, 4, 5]) # 此时将book_id设置为4,5 author_id设置为1[会删除原来的1] # 反向操作【其余同上】
obj = models.Book.objects.get(id=1)
obj.author_set.add(1)
obj.author_set.add(1, 2, 3, 4)
...
Python学习---django多对多之Djanog默认表学习的更多相关文章
- Python学习---django多对多自定义第三方表180206
案例一: # version: python3.2.5 # author: 'FTL1012' # time: 2018/2/6 16:25 from django.db import models ...
- 【Python】django多对多 查询 ,反查等操作
The Django Book中这样写 但我使用属性名后加_set会报错 而直接用members = group.user_group_join.all() 就可以 可能因为我的MyUser类里有两个 ...
- Django学习——Django测试环境搭建、单表查询关键字、神奇的双下划线查询(范围查询)、图书管理系统表设计、外键字段操作、跨表查询理论、基于对象的跨表查询、基于双下划线的跨表查询
Django测试环境搭建 ps: 1.pycharm连接数据库都需要提前下载对应的驱动 2.自带的sqlite3对日期格式数据不敏感 如果后续业务需要使用日期辅助筛选数据那么不推荐使用sqlite3 ...
- Django中国|Django中文社区——python、django爱好者交流社区
Django中国致力于成为Python和Django框架等技术的中文开发者学习交流平台. 内容涵盖python教程.python基础.Django教程.python入门.web.py教程.linux教 ...
- Python学习---django之ORM的增删改查180125
模型常用的字段类型参数 <1> CharField #字符串字段, 用于较短的字符串. #CharField 要求必须有一个参数 maxlength, 用于从数 ...
- Python学习---django模板语法180122
django模板语法[Template] 模版的组成: HTML代码+逻辑控制代码 <h1> {{ user_name }} </h1> 逻辑控制代码的组成: 1.变量: ...
- Python 学习笔记13:Python + wsgi + django 配置。坑爹的python3和wsgi不兼容的解决
今人不见古时月,今月曾经照古人.生命是如此的美丽与短暂! 学习Python已经两个月了,Python的语法通过做简单的语法题和看Python语法介绍,有了初步的了解.但上班还是要做别的事情,所以感觉学 ...
- python之Django学习笔记(一)---搭建Django开发环境和一些基本命令
1.Django下载 官方下载地址:https://www.djangoproject.com/download/ 2.Django安装 linux/windows安装方法相同,具体有以下俩种 pip ...
- Python学习---Django拾遗180328
Django之生命周期 前台发送URL请求到Django的中间件进行内容校验,完成校验后到达路由映射文件url.py,然后调用视图函数views.py里面的函数进行内容处理[ 1.操作数据库进行数据读 ...
随机推荐
- C 标准库 - string.h之memcpy使用
memcpy Copy block of memory Copies the values of num bytes from the location pointed to by source di ...
- InnoDB的哈希算法
InnoDB存储引擎中自适应哈希索引使用的是散列表(Hash Table)的数据结构.但是散列表不只存在于自适应哈希中,在每个数据库中都存在.设想一个问题,当前我的内存为128G,我怎么得到内存中的某 ...
- Unicode和UTF-8之间的转换
转自:http://www.cnblogs.com/xdotnet/archive/2007/11/23/unicode_and_utf8.html#undefined 最近在用VC++开发一个小工具 ...
- JAR,WAR,EAR的使用与区别
WAR(Web Archive file)网络应用程序文件 是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件.为 J2EE 应用程序创建的 JAR 文件是 EAR 文件(企业 JAR 文 ...
- [转]Repeat Page Header on each Page for reports SSRS
本文转自:https://stackoverflow.com/questions/3475144/i-want-to-repeat-page-header-on-each-page-for-repor ...
- HTML5--(3)过渡+动画+颜色+文本
一.过渡transition transition-property指定属性名称 (如width.height.background-color.内外边距) all 所有属性都将获得过渡效果(默认) ...
- SOA(面向服务架构)——踩坑后反思:这样值得吗?
SOA(面向服务架构)——踩坑后反思:这样值得吗?
- CentOS添加SSH登录提示
前言 使用阿里云服务器的应该都注意到每次ssh登录后都能看见类似下面这样的欢迎语: Last login:xxxxxxxxxxxxx Welcome to Alibaba Cloud Elastic ...
- 转 : Apache启动报错:could not bind to address [::]:443 解决办法
转:Apache启动报错:could not bind to address [::]:443 解决办法 安装Apache服务器的时候,报如下错误: Installing the 'apache' s ...
- 关于AJAX的一些事
在JQ中运用AJAX的操作是很舒服的一件事,一直以来我对他都有个错误的认识,直到遇见了问题才把他研究个透彻. 下面贴出两种AJAX的写法,当然都是正确的. 其一: $.ajax({ type: 'po ...