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.操作数据库进行数据读 ...
随机推荐
- python-fifo管道文件通信
#!/usr/bin/python #coding=utf-8 import os,sys,multiprocessing,time try: os.mkfifo('file') except :pa ...
- 微服务Kong(七)——CLI参考
KONG提供了一套CLI(命令行界面)命令,您可以通过它来启动.停止和管理您的Kong实例.CLI管理您的本地节点(如在当前机器上). 全局配置 所有命令都采用一组指定的可选标志作为参数: --hel ...
- svn 被锁,清理恢复过程
svn 被锁,清理恢复过程 http://stackoverflow.com/questions/18000363/tortoisesvn-wont-allow-me-to-add-any-files ...
- 大数乘法的C代码实现
在C语言中,宽度最大的无符号整数类型是unsigned long long, 占8个字节.那么,如果整数超过8个字节,如何进行大数乘法呢? 例如: $ python Python 2.7.6 (def ...
- rails学习笔记: rake db 相关命令
rails学习笔记: rake db 命令行 rake db:*****script/generate model task name:string priority:integer script/g ...
- nginx 反向代理https
nginx 反向代理https 原来我用vertx创建了一个https apiserver,想着用nginx反向代理一下.证书是阿里云上免费一年的. 后来发现nginx要反向代理https自己也必 ...
- switch case :在JDK 7中,又加入了对String类型的支持,从此不用再写If-Else来判断字符串了
switch的case语句可以处理int,short,byte,char类型的值, 因为short,byte,char都会转换成int进行处理,这一点也可以从生成的字节码看出. char a = 'e ...
- 泛型委托Action与ActionT
以前都是自己写委托,其实系统内部给我们系统了委托的. Action ——委托的非泛型版本就是一个无参数无返回值的委托. Action<T>——委托的泛型版本是一个无返回值,但是参数个数及类 ...
- 多边形游戏(DP)
Description 多边形游戏是一个单人玩的游戏,开始时有一个由n个顶点构成的多边形.每个顶点被赋予一个整数值,每条边被赋予一个运算符 "+" 或 "*". ...
- Fill Table Row(it’s an IQ test question)
Here is a table include the 2 rows. And the cells in the first row have been filled with 0~4. Now yo ...