码迷,mamicode.com
首页 > 其他好文 > 详细

Django多对多的增删改查

时间:2019-11-10 19:48:38      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:字段   记录   name   django   set   from   port   lte   man   

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()
  • 基于python3.6 Django 2.1.4

Django多对多的增删改查

标签:字段   记录   name   django   set   from   port   lte   man   

原文地址:https://www.cnblogs.com/wuxiaoshi/p/11831268.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!