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',' ...
随机推荐
- P1036 跟奥巴马一起编程
转跳点:
- 16 ~ express ~ 添加博客分类
一,创建表结构 /schemas/categories.js var mongoose = require('mongoose') module.exports = new mongoose.S ...
- Swift 3 :基于 AVAudioPlayer 的简单音乐播放器
2017.05.22 17:46* 字数 1585 阅读 5095评论 0喜欢 8赞赏 2 https://www.jianshu.com/p/4d5c257428a1 学习ios以来差不多接近两个月 ...
- mysql初始化出现:FATAL ERROR: Neither host 'DB01' nor 'localhost' could be looked up with
初始化时: FATAL ERROR: Neither host 'DB01' nor 'localhost' could be looked up with /application/mysql/bi ...
- Android自定义View——自定义ViewPager
第一部分:自定义ViewGroup的使用,手势识别器和Scroller滑动 第二部分:处理滑动监听,处理滑动冲突,增加ViewPager的指示器 常见的滑动冲突:外部滑动方向和内部滑动方向不一 ...
- PAT Advanced 1076 Forwards on Weibo (30) [图的遍历,BFS,DFS]
题目 Weibo is known as the Chinese version of Twitter. One user on Weibo may have many followers, and ...
- PIP一次性导入所有环境和指定镜像源
镜像源: 阿里云:https://mirrors.aliyun.com/pypi/simple/豆瓣:https://pypi.douban.com/simple/清华大学:https://pypi. ...
- windows server 2012 ftp搭建
1.安装IIS的时候勾选ftp 2.创建ftp站点,先检查21端口是否开放 一定要勾选身份认证,匿名去掉,不然一直登陆不了,也不提示 一直点下一步, 遇到的坑,第一个:出现“打开ftp服务器上的文件夹 ...
- PAT A1005-1008
A 1005 Spell It Right (20 point(s)) 25分的题目,比较简单,注意N的范围,用字符串处理即可. #include <iostream> #include ...
- SEO初步学习之新站优化
新站优化技巧:新站有两个月扶持期,在扶持期间仅做一件事,提交大量优质受众的原创,且内容为不间断,即每天定点定量发布文章,使得蜘蛛对网站形成爬行习惯,新站初期内容为王,优化为辅. 虽说优化为辅,却不可或 ...