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

  • 定义多对多 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. 直播课(1)如何通过数据劫持实现Vue(mvvm)框架

    19.6.28更新: 这篇博客比较完善:将每一部分都分装在单独的js文件中: 剖析Vue原理&实现双向绑定MVVM 半个月前看的直播课,现在才自己敲了一遍,罪过罪过 预览: 思路: 简单实现V ...

  2. [题解] CF438E The Child and Binary Tree

    CF438E The Child and Binary Tree Description 给一个大小为\(n\)的序列\(C\),保证\(C\)中每个元素各不相同,现在你要统计点权全在\(C\)中,且 ...

  3. ACM&OI 基础数论算法专题

    ACM&OI 基础数学算法专题 一.数论基础 质数及其判法 (已完结) 质数的两种筛法 (已完结) 算数基本定理与质因数分解 (已完结) 约数与整除 (已完结) 整除分块 (已完结) 最大公约 ...

  4. ACwing算法基础课听课笔记(第一章,基础算法二)(差分)

    前缀和以及二维前缀和在这里就不写了. 差分:是前缀和的逆运算 ACWING二维差分矩阵    每一个二维数组上的元素都可以用(x,y)表示,对于某一元素(x0,y0),其前缀和就是以该点作为右下角以整 ...

  5. Redis: Reducing Memory Usage

    High Level Tips for Redis Most of Stream-Framework's users start out with Redis and eventually move ...

  6. WordPress站点绑定多个域名

    refer to https://blog.csdn.net/wzl505/article/details/54970321 打开根目录下的 wp-config.php 文件,找到 require_o ...

  7. Windows10 与 WSL(Ubuntu)的文件互访

    从WSL访问win10的文件 > cd /mnt 从win10访问WSL的文件 打开Ubuntu > explorer.exe . (后面的点不要漏掉)

  8. [CISCN2019 总决赛 Day1 Web4]Laravel1

    0x00 知识点 这个题核心就是找POP链,看了一下网上的WP,难顶啊.. 先贴上思路和poc,之后等熟练了再来做吧 https://glotozz.github.io/2019/11/05/buuc ...

  9. DQL多表查询

    DQL多表查询 一.多表查询实现多个表之间查询数据 1.交叉连接笛卡尔积:A表中的每一行匹配B表中的每一行基本结构:select [数据库名1.]表名1,属性名1,......, [数据库名.]表名. ...

  10. 18 11 26 用多进程 多线程 携程 实现 http 服务器的创建

    下面是一个  多进程 服务器的创建 import socket import re import multiprocessing def service_client(new_socket): &qu ...