Django 多对多 关系
多对多,本意就是多个一对多的关系
定义多对多
ManyToManyField字段from django.db import models # 学生类
class Student(models.Model):
name = models.CharField(max_length=32) # 老师类
class Teacher(models.Model):
name = models.CharField(max_length=32)
students = models.ManyToManyField(to='Student',related_name='stu')多对多添加
- 添加一条记录
# 老师选择学生
teacherobj = models.Teacher.objects.filter(id=1).first()
studentobj = models.Student.objects.filter(id=1).first()
teacherobj.students.add(studentobj)
return Response('ok')# 学生选择老师
studentobj = models.Student.objects.filter(id=1).first()
teacherobj = models.Teacher.objects.filter(id=2).first()
studentobj.stu.add(teacherobj)
return Response('ok')- 添加多条记录
# 老师选择多名学生
teacherobj = models.Teacher.objects.filter(id=3).first()
teacherobj.students.add(*[1,2,3,4])
teacherobj.save()# 学生选择多名老师
studentobj = models.Student.objects.filter(id=2).first()
studentobj.stu.add(*[3,4])
studentobj.save()- 添加不重复的记录
# 老师选择多名学生
teacherobj = models.Teacher.objects.filter(id=3).first()
teacherobj.students.set(*[1,2,3,4])
teacherobj.save()# 学生选择多名老师
studentobj = models.Student.objects.filter(id=2).first()
studentobj.stu.set(*[3,4])
studentobj.save()多对多查询
# 查询老师有多少名学生
teacherobj = models.Teacher.objects.filter(id=3).first()
stuobj = teacherobj.students.all()# 查询学生有多名老师
studentobj = models.Student.objects.filter(id=2).first()
teacherobj = studentobj.stu.all()多对多更新
# 老师批量换学生
teacherobj = models.Teacher.objects.filter(id=3).first()
teacherobj.students.set([1,2,3,4])# 学生批量换老师
studentobj = models.Student.objects.filter(id=3).first()
studentobj.stu.set([1,2,3,4])多对多删除
# 老师删除一个学生
teacherobj = models.Teacher.objects.filter(id=3).first()
studentobj = models.Student.objects.filter(id=2).first()
teacherobj.students.remove(studentobj)# 学生删除一个老师
studentobj = models.Student.objects.filter(id=3).first()
teacherobj = models.Teacher.objects.filter(id=4).first()
studentobj.stu.remove(teacherobj)
studentobj.save()# 老师删除所有学生
teacherobj = models.Teacher.objects.filter(id=1).first()
teacherobj.students.clear()
teacherobj.save()# 学生删除所有老师
studentobj = models.Student.objects.filter(id=3).first()
studentobj.stu.clear()
studentobj.save()
Django 多对多 关系的更多相关文章
- Django多对多关系建立及Form组件
目录 Django多对多关系 1.创建方式一全自动 2.创建方式二纯手撸 3.半自动(推荐使用) forms校验组件 使用forms组件实现注册功能 form常用字段和插件 数据校验 钩子函数 HOO ...
- django -- 多对多关系的实现
在django中表和表之间的多对多关系有两种实现方案: 方案一:直接使用django自动实现的多对多关系. 方案二:自己写连接表.然而告诉django在实现多对多关系时要使用的连接表. 一.方案一: ...
- Django --- 多对多关系创建,forms组件
目录 多对多三种创建方式 1.系统直接创建 2.自己手动创建 3.自己定义加与系统创建 forms组件 1. 如何使用forms组件 2. 使用forms组件校验数据 3. 使用forms组件渲染标签 ...
- django 学习-10 Django多对多关系模型
1.vim blog/models.py class Author(models.Model): name = models.CharField(max_length=30) def unicod ...
- django笔记-模型数据模板呈现过程记录(多对多关系)
首先,推荐一个网址:http://www.tuicool.com/articles/BfqYz2F,因为这里的比我的要有条理,更有利于各位的理解. 以下仅为为个人一次不完整的笔记: 环境:ubuntu ...
- Django 一对多,多对多关系解析
[转]Django 一对多,多对多关系解析 Django 的 ORM 有多种关系:一对一,多对一,多对多. 各自定义的方式为 : 一对一: OneToOneField ...
- django ORM模型表的一对多、多对多关系、万能双下划线查询
一.外键使用 在 MySQL 中,如果使用InnoDB引擎,则支持外键约束.(另一种常用的MyIsam引擎不支持外键) 定义外键的语法为fieldname=models.ForeignKey(to_c ...
- Django 之多对多关系
1. 多对多关系 作者 <--> 书籍 1. 表结构设计 1. SQL版 -- 创建作者表 create table author( id int primary key auto_inc ...
- Linux下开发python django程序(django数据库多对多关系)
1.多对多关系数据访问 models.py设置 from django.db import models # Create your models here. sex_choices=( ('f',' ...
随机推荐
- HDU 5430:Reflect 欧拉函数
Reflect Accepts: 72 Submissions: 302 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/ ...
- 春节宅家火了短视频,手游 APP 成最大赢家!
春节历来是APP运营者翘首以盼的火热期,但2020年的春节有些特殊, 新型冠状病毒的爆发,牵动着全国亿万人民的心.响应号召不出门,宅在家里玩手机,于是打游戏.看新闻.追剧等成为大家打发时间.疏解内心压 ...
- 输入框中提示信息(html5)
placeholder 属性规定可描述输入字段预期值的简短的提示信息(比如:一个样本值或者预期格式的短描述). 该提示会在用户输入值之前显示在输入字段中. 注意:placeholder 属性适用于下面 ...
- stm32h7 开发板学习
按键和 IO 之间连接一个 1K 电阻,可以防止当 IO 被配置为高电平输出的时候,按下按键,导致 VDD 和 GND 直接连通.
- 51Nod大数加法(两个数正负都可)
很多大数的问题都运用模拟的思想,但是这个说一样也一样,但是难度较大,很麻烦,我自己谢写了100多行的代码,感觉很对,但就是WA.其实个人感觉C和C++没有大数类,是对人思想和算法的考验,但是有时候做不 ...
- linux 用户与文件常用命令
用户与文件 su :切换到超级用户 su - l chesney : 切换到chesney用户 sudo usermod -G sudo -a chesney:把chesney 加入到sudo组 su ...
- SASS- 局部文件(Partial)
SASS – 简介 SASS – 环境搭建 SASS – 使用Sass程序 SASS – 语法 SASS – 变量 SASS- 局部文件(Partial) SASS – 混合(Mixin) SASS ...
- MySQL授权用户登录访问指定数据库
使用Navicat等客户端工具,选中需要共享的数据库,点击查询>新建查询 1.写SQL语句:GRANT ALL PRIVILEGES ON * TO 'test'@'%'IDENTIFIED B ...
- SQL笔记整理
- 备份mysql的批处理命令
需要工具mysqldump.exe的支持,安装mysql默认是带此工具的 批处理命令 set NOW_TIME_HH=%time:~0,2% if "%NOW_TIME_HH%" ...