django models的多对多关系
models.py models里面的建表操作 class Student(models.Model): name = models.CharField(verbose_name='老师名字',max_length=50) class Meta: db_table = 'student' class Teacher(models.Model): name = models.CharField(verbose_name='老师名字',max_length=50) # 多对对关系的建立 student = models.ManyToManyField(Student,verbose_name='学生') class Meta: db_table = 'teacher'
views.py teacher_obj = models.Teacher.objects.get(id=2) student_obj = models.Student.objects.get(id =1)
# 谁和谁建立多对多关系,把models.ManyToManyField这个字段写给谁了,多对多关系就由谁建立 # 创建多对多关系,方法1 接收对象: teacher_obj.student.add(student_obj) # 创建多对多关系2, add方法可以接收主键id teacher_obj.student.add(1) # 删除多对多关系,由谁创建多多对多关系就由谁来删除 teacher_obj.student.clear() #清除老师对应多所有学生,批量操作 teacher_obj.student.remove(1) #指定某个学生进行删除,清除id为1的学生 teacher_obj.student.remove(student_obj) #也可以传入学生对象 # 重置多对多关系 #删除已有关系,重新创建新的多对多关系,接收学生id,列表里面是学生的主键id [1,2,3],老师重新换了一批学生 teacher_obj.student.set([1,2,3]) # 查询多对多关系 # 正向查询 # 获取这个老师有哪些学生 students = teacher_obj.student.all() print(students) # 反向查询 # 基于某个学生,去查这个学生有哪些老师 teachers = student_obj.teacher_set.all() print(teachers)