django models 多对多
创建有多对多关系的数据库-models
class Student(models.Model):
name = models.CharField(verbose_name='学生名字', max_length=50)
age = models.IntegerField(verbose_name='年龄')
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'
创建多对多关系
# 获取到某一个老师
teacher_obj = models.Teacher.objects.get(id=1)
# 获取一个学生
student_ogj = models.Student.objects.get(id=3)
# 创建多对多关系 方法一 接收对象
teacher_obj.student.add(student_ogj)
# 创建多对多关系 方法二 接收主键ID
teacher_obj.student.add(3)
teacher_obj.student.add(4)
删除多对多关系
# 删除多对多关系
teacher_obj.student.clear() # 清除老师对应的所有学生 批量操作 比如:老师离职了
teacher_obj.student.remove(2) # 清除id为2的学生,当操作,比如:学生劝退了
teacher_obj.student.remove(student_ogj) # 也可以传入学生对象
# 重置多对多关系
teacher_obj.student.set([3,4])
# 接收一个数组,重置就是删除原来所有的对应关系,再插入这两个
查询多对多关系
# 查询多对多
# 正向查询,多对多关系是由老师创建,所以查询老师的内容就是正向查询
students = teacher_obj.student.all() # 获取老师所有的学生
print(students)
# 反向查询
teachers = student_ogj.teacher_set.all() # 获取这个学生拥有的老师
print(teachers)