案例一:

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默认表学习的更多相关文章

  1. Python学习---django多对多自定义第三方表180206

    案例一: # version: python3.2.5 # author: 'FTL1012' # time: 2018/2/6 16:25 from django.db import models ...

  2. 【Python】django多对多 查询 ,反查等操作

    The Django Book中这样写 但我使用属性名后加_set会报错 而直接用members = group.user_group_join.all() 就可以 可能因为我的MyUser类里有两个 ...

  3. Django学习——Django测试环境搭建、单表查询关键字、神奇的双下划线查询(范围查询)、图书管理系统表设计、外键字段操作、跨表查询理论、基于对象的跨表查询、基于双下划线的跨表查询

    Django测试环境搭建 ps: 1.pycharm连接数据库都需要提前下载对应的驱动 2.自带的sqlite3对日期格式数据不敏感 如果后续业务需要使用日期辅助筛选数据那么不推荐使用sqlite3 ...

  4. Django中国|Django中文社区——python、django爱好者交流社区

    Django中国致力于成为Python和Django框架等技术的中文开发者学习交流平台. 内容涵盖python教程.python基础.Django教程.python入门.web.py教程.linux教 ...

  5. Python学习---django之ORM的增删改查180125

    模型常用的字段类型参数 <1> CharField        #字符串字段, 用于较短的字符串.        #CharField 要求必须有一个参数 maxlength, 用于从数 ...

  6. Python学习---django模板语法180122

    django模板语法[Template] 模版的组成:  HTML代码+逻辑控制代码  <h1> {{ user_name }} </h1> 逻辑控制代码的组成: 1.变量: ...

  7. Python 学习笔记13:Python + wsgi + django 配置。坑爹的python3和wsgi不兼容的解决

    今人不见古时月,今月曾经照古人.生命是如此的美丽与短暂! 学习Python已经两个月了,Python的语法通过做简单的语法题和看Python语法介绍,有了初步的了解.但上班还是要做别的事情,所以感觉学 ...

  8. python之Django学习笔记(一)---搭建Django开发环境和一些基本命令

    1.Django下载 官方下载地址:https://www.djangoproject.com/download/ 2.Django安装 linux/windows安装方法相同,具体有以下俩种 pip ...

  9. Python学习---Django拾遗180328

    Django之生命周期 前台发送URL请求到Django的中间件进行内容校验,完成校验后到达路由映射文件url.py,然后调用视图函数views.py里面的函数进行内容处理[ 1.操作数据库进行数据读 ...

随机推荐

  1. Tomcat *的下载(绿色版和安装版都适用)

    不多说,直接干货! 1.先下载tomcat,到http://tomcat.apache.org/ 2.注意:下载可以下载zip格式或exe格式的,其中zip格式的只要解压缩再配置下环境变量就可以使用了 ...

  2. WPF中使用TextBlock的Inlines属性来完成复杂的文字内容

    参考:http://blog.csdn.net/zhangjiyehandsom/article/details/5498845 1. 需求:要在一行内容中显示不同颜色以及粗细不一的字体, 解决办法: ...

  3. Eclipse空白包的显示和隐藏

    Eclipse空白包的显示和隐藏 点击三角形, ,下拉 -> Customize View... -> Empty packages (勾选)

  4. 【css】清除浮动的几种方式

    [css]清除浮动的几种方式   因为浮动框不在普通的文档流中,所以它不占据空间.如下面的代码: .news { background-color:gray; border:1px solid bla ...

  5. python爬虫实战(八)--------知乎

    相关代码已经修改调试成功----2017-4-22 一.说明 1.目标网址:知乎登入后的首页 2.实现:如图字段的爬取 zhihu_question表: zhihu_answer表: 3.数据:存放在 ...

  6. 简单的winform编辑器

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  7. 15、IO (转换流、缓冲流)

    转换流概述 * A: 转换流概述 * a: 转换流概述 * OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节 * 将字符串按照指定的 ...

  8. bnu 10805 矩形神码的 平面向量的运行

    矩形神码的 Time Limit: 1000ms Memory Limit: 65536KB Special Judge   64-bit integer IO format: %lld      J ...

  9. K:java中的RMI(Remote Method Invocation)

    相关介绍:  RMI全称是Remote Method Invocation,即远程方法调用.它是一种计算机之间利用远程对象互相调用,从而实现双方通讯的一种通讯机制.使用这种机制,某一台计算机(虚拟机) ...

  10. BZOJ P1059 [ZJOI2007]矩阵游戏——solution

    1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4604  Solved: 2211[Submit][Stat ...