Django基础09篇 表关系多对多、一对一、自关联
1.多对多
表关系的多对多,例如一个老师可以教多个学生,一个学生有多个老师
1.1 创建表结构
多对多在A表添加manytomany字段或者从B表添加,效果一致,最终产生第三张表来实现多对多关联关系,字段取两张表的primary key进行对应
class Teacher(models.Model): name = models.CharField(max_length=50, verbose_name='老师姓名') def __str__(self): return self.name class Meta: db_table = 'teacher' class Student(models.Model): name = models.CharField(max_length=50, verbose_name='学生姓名') teacher = models.ManyToManyField(Teacher, verbose_name='老师') def __str__(self): return self.name class Meta: db_table = 'student'

1.2 新增数据
方法一:传对象形式,无返回值
# 正向查询,models中Student中有多对多关系 # 新增数据,新增多对多关系 #传对象方式,无返回值 stu = models.Student.objects.create(name='王三胖') teacher_obj = models.Teacher.objects.filter(name='李老师').first() # 获取老师对象 teacher_obj2 = models.Teacher.objects.filter(name='王老师').first() # 获取老师对象 stu.teacher.add(teacher_obj, teacher_obj2)
方法二:传对象id,无返回值
# 正向查询,models中Student中有多对多关系 # 新增数据,新增多对多关系 # 传对象id,无返回值 stu = models.Student.objects.create(name='王三金') teacher_obj = models.Teacher.objects.filter(name='李老师').first() # 获取老师对象 teacher_id = teacher_obj.id #获取对象id stu.teacher.add(teacher_id)
1.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])#新增,每次都会先删除所有的绑定关系,再新增,比如一个老师去别的班当班主任了
1.4 查询
2.一对一
一对一:子表从母表中选出一条数据一一对应,母表中选出来一条就少一条,子表不可以再选择母表中已被选择的那条数据
3.自关联
                    
                
                
            
        
浙公网安备 33010602011771号