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

  • 定义多对多 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 多对多 关系的更多相关文章

  1. Django多对多关系建立及Form组件

    目录 Django多对多关系 1.创建方式一全自动 2.创建方式二纯手撸 3.半自动(推荐使用) forms校验组件 使用forms组件实现注册功能 form常用字段和插件 数据校验 钩子函数 HOO ...

  2. django -- 多对多关系的实现

    在django中表和表之间的多对多关系有两种实现方案: 方案一:直接使用django自动实现的多对多关系. 方案二:自己写连接表.然而告诉django在实现多对多关系时要使用的连接表. 一.方案一: ...

  3. Django --- 多对多关系创建,forms组件

    目录 多对多三种创建方式 1.系统直接创建 2.自己手动创建 3.自己定义加与系统创建 forms组件 1. 如何使用forms组件 2. 使用forms组件校验数据 3. 使用forms组件渲染标签 ...

  4. django 学习-10 Django多对多关系模型

    1.vim blog/models.py class   Author(models.Model): name = models.CharField(max_length=30) def unicod ...

  5. django笔记-模型数据模板呈现过程记录(多对多关系)

    首先,推荐一个网址:http://www.tuicool.com/articles/BfqYz2F,因为这里的比我的要有条理,更有利于各位的理解. 以下仅为为个人一次不完整的笔记: 环境:ubuntu ...

  6. Django 一对多,多对多关系解析

    [转]Django 一对多,多对多关系解析   Django 的 ORM 有多种关系:一对一,多对一,多对多. 各自定义的方式为 :        一对一: OneToOneField         ...

  7. django ORM模型表的一对多、多对多关系、万能双下划线查询

    一.外键使用 在 MySQL 中,如果使用InnoDB引擎,则支持外键约束.(另一种常用的MyIsam引擎不支持外键) 定义外键的语法为fieldname=models.ForeignKey(to_c ...

  8. Django 之多对多关系

    1. 多对多关系 作者 <--> 书籍 1. 表结构设计 1. SQL版 -- 创建作者表 create table author( id int primary key auto_inc ...

  9. Linux下开发python django程序(django数据库多对多关系)

    1.多对多关系数据访问 models.py设置 from django.db import models # Create your models here. sex_choices=( ('f',' ...

随机推荐

  1. CGridCtrl设置行列不可拉伸

    m_HFlexGrid.SetColumnResize(FALSE); m_HFlexGrid.SetRowResize(FALSE);

  2. oracle修改表名

    alter table 原来表名 rename to 新表名

  3. ssi引用路径规则

    1.file:引用的是相对路径,相对当前文件的,特别注意使用file,被引用文件只能与当前文件同级.或下级.不能在其上级(不支持../) <!--#include file="head ...

  4. df 、dh

    查看磁盘 不挂载获取文件系统 [root@localhost ~]# file -s /dev/sda1/dev/sda1: SGI XFS filesystem data (blksz 4096, ...

  5. h5-360_introduce页面案例

    整个网页的html 首先,忽略我的网页比较丑,主要是ps功底不太好, 其次这个网页是利用了全屏插件:jquery.fullPage.js.需要事先导入相应的js文件 js文件下载地址:http://w ...

  6. maven的理解和使用

    一.maven是什么? maven是项目管理工具 二.maven为什么要用? 在做开发的时候常常会用到外部的工具包(jar包),这就需要你一个一个的去他们的官网下工具包,然后在项目里依赖他们,比较的麻 ...

  7. 在h5页面上添加音乐播放

    接到需求说要做一个h5轮播图,同时配上背景音乐. Html部分: <!--音乐开始--> <div id="music"> <div id=" ...

  8. POJ 3050:Hopscotch

    Hopscotch Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2506   Accepted: 1784 Descrip ...

  9. Python String startswith() Method

    一,摘自官方API  https://docs.python.org/3/library/stdtypes.html#methods str.startswith(prefix[, start[, e ...

  10. 利用mysecureshell搭建sftp服务

    1.下载对应的mysecureshell-1.33-1.x86_64.rpm包 2.安装mysecureshell-1.33-1.x86_64.rpm 3.添加ftp用户 useradd ftp 4. ...