1.多对多表结构设计
class Student(models.Model):
name = models.CharField(verbose_name='学生名字',max_length=100)
class Meta:
db_table = 'student'
class Teacher(models.Model):
name = models.CharField(verbose_name='老师名字',max_length=100)
student = models.ManyToManyField(Student,verbose_name='学生')
class Meta:
db_table = 'teacher'
2.多对多绑定关系
#多对多关系
teacher_obj = models.Teacher.objects.get(id=2)
student_obj = models.Student.objects.get(id=4)
#谁和谁去建立多对多关系
#创建多对多关系 方法1 add方法可以接受对象
teacher_obj.student.add(student_obj)
#创建多对多关系,方法2 add方法可以接收主键id
teacher_obj.student.add(3)#
3.删除
#删除多对多关系
teacher_obj.student.clear()
#删除指定数据
teacher_obj.student.remove(2) #接收主键id
teacher_obj.student.remove(student_obj)#接收对象
teacher_obj.student.set([1,2,3,4])#新增,每次都会先删除所有的绑定关系,再新增,比如一个老师去别的班当班主任了
4.查询
#查询多对多关系
#正向查询
#获取这个老师有哪些学生
students = teacher_obj.student.all()
print('students',students)
#反向查询
#根据这个学生,查询这个学生有几个老师
teachers = student_obj.teacher_set.all()
print('teachers',teachers)