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)