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',' ...
随机推荐
- ZOJ - 3870 Team Formation(异或)
题意:给定N个数,求这N个数中满足A ⊕ B > max{A, B})的AB有多少对.(A,B是N中的某两个数) 分析: 1.异或,首先想到转化为二进制. eg:110011(A)和 1(B)- ...
- UltraISO制作manjaro系统盘,使用优盘
下载系统镜像 默认是清华镜像 刻入方式一定要选RAW方式
- java课程之团队开发冲刺阶段2.2
一.总结昨天进度 1.单独实现静音功能,还没有进行整体整合 二.遇到的问题 1.一开始设计静音的思路有问题,所以在实现上有些许麻烦,一开始的想法是将这些音量直接设置为0就可以实现静音,但是在恢复响铃模 ...
- 十七、CI框架之数据库操作insert用法
一.代码如下: 二.我们访问一下页面 三.查看数据库,已经插入了一条数据 不忘初心,如果您认为这篇文章有价值,认同作者的付出,可以微信二维码打赏任意金额给作者(微信号:382477247)哦,谢谢.
- Objective-C 和 Swift 第三方库使用
https://www.jianshu.com/p/6be32a047ca7 原文地址: Objective-C 和 Swift 第三方库使用 注1:文章写于2016年9月,(swift 3.0.Xc ...
- 实验吧web-中-简单的sql注入
页面显示:到底过滤了什么东西? 所以我们先试试到底是过滤了什么 1 显示正常 1' 不正常 (直接输入的关键字均会被过滤) 1 union select 显示:1 select 1 union sel ...
- c# 循环界面控件
在 Winform 开发中,窗体(Form)就像一个大容器,可以装各种各样的控件,包括 Panel控件.如果窗体是 Winform 中的最大的容器,那么 Panel控件可以算是老二,它专门用于软件界面 ...
- 在Linux下 MySQL错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 解决办法【很管用】
一般这个错误是由密码错误引起,解决的办法自然就是重置密码. 假设我们使用的是root账户. 1.重置密码的第一步就是跳过MySQL的密码认证过程,方法如下: #vim /etc/my.cnf(注:wi ...
- vnpy交易接口学习
1.按照github中环境准备要求,配置好环境要求. https://github.com/vnpy/vnpy mongdb安装在D:\Program Files\MongoDB\Server\3.4 ...
- [SDOI2016]游戏(树剖+李超树)
趁着我把李超树忘个一干二净的时候来复习一下吧,毕竟马上NOI了. 题解:看着那个dis就很不爽,直接把它转换成深度问题,然后一条直线x->y,假设其lca为z,可以拆分成x->z和z-&g ...