ManytoMany字段增删改查Django
Django下ManytoMany 增删改查
建立学生类老师类多对多关系,用ManytoManyField,迁移同步后自动生成中间表tb_Teacher_Student
# 学生类
class Student(models.Model):name = models.CharField(max_length=32)class Meta:db_table = 'tb_Student'# 老师类
class Teacher(models.Model):name = models.CharField(max_length=32)students = models.ManyToManyField('Student',related_name='teacher')class Meta:db_table = 'tb_Teacher'
增,改
add()
t1=Teacher(name='jotaro') # 实例化老师jotaro s1=Student(name='dio') # 实例化学生dio t1.students.add(s1) print(t1.name) # 报错 ValueError**: "<Teacher: Teacher object (None)>" needs to have a value for field "id" before this many-to-many relationship can be used.
用add()构建多对多关系之前数据库得先有目标数据。
t1=Teacher(name='jotaro') # 实例化老师jotaro s1=Student(name='dio') # 实例化学生dio t1.students.add(s1) t1.save() s1.save() print(t1.name) # jotaro
create()
建立关系并创建学生对象 t2 = Teacher(name='joseph') t2.save() t2.students.create(name='kirakira') stu = t2.students.all() print(stu) # <QuerySet [<Student: kirakira>]>
set()
# 批量建立对象多对多的关系,存在则覆盖 t1=Teacher(name='jotaro') s1=Student(name='dio') s2=Student(name='kira') s3=Student(name='paul')s1.save() s2.save() s3.save() t1.save() t1.students.add(s1) print(t1.students.all()) # <QuerySet [<Student: dio>]> t1.students.set([s2,s3]) print(t1.students.all()) # dio这个学生被覆盖了 <QuerySet [<Student: kira>, <Student: paul>]>
查
由于ManyToManyField设在Teacher表,字段为students,且relate_name为teacher,所以学生对象查所从老师可以直接用学生对象.teacher.all()查出来,老师对象查学生用老师对象.students.
t2 = Teacher(name='joseph') t3 = Teacher(name='jonathan') t3.save() t2.save() t3.students.create(name="kirakira") t2.students.add(t3.students.get(name="kirakira")) stu = t2.students.get(name='kirakira') print(stu.teacher.all()) # <QuerySet [<Teacher: jonathan>, <Teacher: joseph>]>
约束条件查询
# 查询than名字结尾老师的学生 stu = Student.objects.filter(name='kirakira') than_stu = Student.objects.filter(teacher__name__endswith='than') print(than_stu) #<QuerySet [<Student: kirakira>]>
删
delete(),当删除其中一方的对象,多对多表里对应的关系行也自动删除
teacher = Teacher.objects.get(students__name='kirakira') print(teacher.students.all()) # <QuerySet [<Student: kirakira>]> stu = Student.objects.get(name='kirakira') stu.delete() print(teacher.students.all()) # <QuerySet []>
remove()
如果单纯想去除单个学生和老师的多对多关系,而不想删除任何一方的数据,可以用remove() t1=Teacher(name='jotaro') s1=Student(name='dio') s1.save() t1.save() t1.students.add(s1) print(t1.students.all()) # <QuerySet [<Student: dio>]>t1.students.remove(s1) print(s1) # dio print(t1.students.all()) # <QuerySet []>
clear()
清除某个对象所有的多对多关系t1 = Teacher(name='jotaro') s1 = Student(name='dio') s2 = Student(name='kira') s3 = Student(name='paul') s1.save() s2.save() s3.save() t1.save() t1.students.set([s1, s2, s3]) print(t1.students.all()) # <QuerySet [<Student: dio>, <Student: kira>, <Student: paul>]> t1.students.clear() print(t1.students.all()) # <QuerySet []>
ManytoMany字段增删改查Django相关推荐
- mysql 删除一个约束条件_MySQL 字段增删改查 和 约束条件
一.字段操作 1.添加字段 (add) alter table add 字段名 数据类型; desc ; 2.修改字段数据类型 (modify) alter table modify ; 3.字段重命 ...
- python增删改查的框架_python的Web框架,Django的ORM,模型基础,MySQL连接配置及增删改查...
Django中的ORM简介 ORM概念:对象关系映射(Object Relational Mapping,简称ORM): 用面向对象的方式描述数据库,去操作数据库,甚至可以达到不用编写SQL语句就能够 ...
- Django 07模型层—单表操作(增删改查)
单表查询 一.数据库相关设置 ''' # Mysql连接配置 DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': ...
- SpringMVC表单数据增删改查简易梳理(含实例代码)
使用SpringMVC创建表单进行数据的增删改查是javaEE开发的基本功,本人根据自己最近开发的基于jeecms框架的网站平台来梳理数据增删改查的思路. 首先根据所需表单页面设计数据库,定义不同字段 ...
- python增删改查的框架_简单的Django框架增删改查操作
Django之orm对MysqL数据库的增删改查操作简介: 利用Django中orm来查找数据库中的数据,对数据库进行增.删.改.查: 增:新增数据 # 操作数据库user表新增记录 # 方式1: u ...
- Django 操作Mysql数据库 对表进行增删改查
为什么80%的码农都做不了架构师?>>> 首先说明:以下方法都是根据表已有的字段添加数据,若想新增字段,则需在类里面新建静态字段, 可参考Django 操作数据库建表 ,增删 ...
- Django学习笔记(10)——Book单表的增删改查页面
一,项目题目:Book单表的增删改查页面 该项目主要练习使用Django开发一个Book单表的增删改查页面,通过这个项目巩固自己这段时间学习Django知识. 二,项目需求: 开发一个简单的Book增 ...
- Web框架之Django_02基本操作(Django项目启动配置、数据库连接、orm、增删改查)
阅读目录 摘要: Django项目简单现实过程 pycharm连接数据库 Django之orm简单操作增删改查 一.新建Django项目.配置.设置: 新建Django项目:(为了熟悉Django操作 ...
- Django框架(三)—— orm增删改查、Django生命周期
orm增删改查.Django生命周期 一.orm介绍 1.什么是orm ORM即Object Relational Mapping,全称对象关系映射. 2.使用orm的优缺点 优点: 不用写SQL语句 ...
最新文章
- 多重集合的排列和组合问题
- CASS 7.1 和 AutoCAD 2006的安装使用
- 图解SQL基础知识,小白也能看懂的SQL文章!
- PHP中header的用法
- .Net Core in Docker极简入门(上篇)
- bmp怎么编辑底色_非标机械设计这个行业前景怎么样
- P1319 压缩技术(python3实现)
- 6月第二周中国五大顶级域名增2.4万 美国减6.8万
- Comparable和Comparator接口是干什么的?列出它们的区别。
- 计算最大子段(分治法)
- 【ACL2020】关于正式风格迁移的数据增强方法
- DPDK-VPP 学习笔记-01
- 第14课:JSP动作 JSP param动作(JSP教程 JSP入门实战教程 黄菊华Java网站开发系列教程)
- 游戏蛮牛unity权威指南全实例讲解书籍上线
- 正点原子STM32学习笔记——MPU6050介绍
- 新版gsp五个附录计算机培训,新版GSP附录5 ——验证管理
- 腾讯翻译君在线翻译怎么翻译整个文件_希腊语怎么翻译?教你两个超实用的翻译方法...
- 偷偷盘点一下各大公司的实习薪资
- 机器学习个人资料整理
- UVA-11584:Partitioning by Palindromes(基础DP)
热门文章
- java native 原理_一种Java+Native应用的系统架构的制作方法
- VMvare 安装kali linux系统及网络配置
- 国产操作系统第一股,杨涛的麒麟信安是否名副其实?
- 前端_#网页设计大作业 总结随记
- unity 前端场景搭建UI框架的设计
- 关于vue的url请求图片的问题,请求失败
- pytorch_Realtime_Multi-Person_Pose_Estimation项目学习
- AI+生物计算:用计算机视觉技术理解细胞生命
- PU learning
- “N刷”为何成为时尚