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.操作数据库进行数据读 ...
随机推荐
- 使用vue的v-model自定义 checkbox组件
<template id='c'> <input type="checkbox" :checked="checked" v-on:change ...
- teleport助手不可以使用剪切板的问题解决
在使用teleport堡垒机的时候,你使用teleport助手会发现不可以使用剪切板,接下来就是解决方法. 解决办法:更新freerdp 基于环境:win10(win7下更新好像没有用),telepo ...
- Ubuntu系统Apache Maven安装
操作系统:Linux x64 / Ubuntu 14.04 Apache Maven版本:3.3.9 建议预先搭建Java开发环境:详见上一篇<Linux Ubuntu系统下Java开发环境搭建 ...
- 一头扎进 Java IO中-------java IO文件
Java IO: 文件 在Java应用程序中,文件是一种常用的数据源或者存储数据的媒介.所以这一小节将会对Java中文件的使用做一个简短的概述.这篇文章不会对每一个技术细节都做出解释,而是会针对文件存 ...
- 过滤网址和输入框中的特殊字符,防止sql注入
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...
- 代码实现SpringMvc
偶然看到一篇100多行实现SpringMvc的博客,阅读后整理加实现出来.大家共勉!(纸上得来终觉浅,绝知此事要躬行.) 实现Spring的部分. Bean工厂,统一创建Bean: IOC,实现Bea ...
- 【SSH网上商城项目实战08】查询和删除商品类别功能的实现
转自:https://blog.csdn.net/eson_15/article/details/51338991 上一节我们完成了使用DataGrid显示所有商品信息,这节我们开始添加几个功能:添加 ...
- K:线性表的实现—顺序表
所谓顺序表,就是顺序存储的线性表.顺序存储就是用一组地址连续的存储单元依次存放线性表中各个数据元素的存储结构. 线性表中所有数据元素的类型是相同的,所以每一个数据元素在存储器中占用相同的大小的空间.假 ...
- Java SE 8 的流库学习笔记
前言:流提供了一种让我们可以在比集合更高的概念级别上指定计算的数据视图.如: //使用foreach迭代 long count = 0; for (String w : words) { if (w. ...
- LeetCode SQL: Second Highest Salary
, NULL, salary) as `salary` from ( ,) tmp Write a SQL query to get the second highest salary from th ...