多對多,本意就是多個一對多的關係python
定義多對多 ManyToManyField
字段django
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')
多對多添加code
# 老師選擇學生 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()
多對多查詢rem
# 查詢老師有多少名學生 teacherobj = models.Teacher.objects.filter(id=3).first() stuobj = teacherobj.students.all()
# 查詢學生有多名老師 studentobj = models.Student.objects.filter(id=2).first() teacherobj = studentobj.stu.all()
多對多更新class
# 老師批量換學生 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])
多對多刪除import
# 老師刪除一個學生 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.4object