• 多对多,本意就是多个一对多的关系

  • 定义多对多 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()

最新文章

  1. 《Java疯狂讲义》(第3版)学习笔记 2 - Java语言的运行机制
  2. Spring 事务配置管理,简单易懂,详细 [声明式]
  3. 【BZOJ】【3759】Hungergame饥饿游戏
  4. Redis系列(2)之数据类型
  5. 简单计算器(Android)
  6. Httpservlet cannot be resolved to a type
  7. SE 2014年4月24日
  8. ios animation暂停pause、恢复resume
  9. IntelliJ IDEA 发布13版本——创造java奇迹
  10. VisualStudio2017集成GitHub
  11. boost多线程入门介绍
  12. UVA1620-Lazy Susan(思维+逆序对)
  13. redis服务意外停止
  14. ubuntu系统安装mysql登陆提示 解决Mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost'问题
  15. CentOS安装和配置Apache(httpd)
  16. Maven CXF wsdl2Java List<Xxx>生成ArrayOfXxx包装对象 解决方法
  17. Burp Suite扫描器漏洞扫描功能介绍及简单教程
  18. python对oracle数据库的操作
  19. 安卓机在按HOME键时,UNITY触发的APPLICATION_PAUSE事件
  20. PMP十五至尊图(第六版)

热门文章

  1. POJ 2443:Set Operation 经典位运算好题
  2. Python Learning Day7
  3. Information:java: Errors occurred while compiling module 错误
  4. 类似今日头条,头部tab可滑动,下面的内容可跟着滚动,掺杂着vue和require等用法例子
  5. 生成私钥、公钥,配置到Git上
  6. Oracle专题
  7. 洛谷 AT2827 LIS
  8. Navicat for Mysql 11.2 的下载,安装与激活
  9. Q1:Two Sum
  10. 使用Dom4j生成xml文件(utf-8编码)