# 添加子表关联关系, # 添加apollo并让他喜欢所有颜色 # 写法1:子表对象.子表多对多字段.add(*QuerySet对象) # 如果是已有用户,使用.get() child_obj = Child.objects.create(name="apollo") # 创建颜色表的所有颜色QuerySet对象 colors_obj = Colors.objects.all() # 添加对应关系,将apollo和所有颜色进行关联, child_obj.favor.add(*colors_obj) # 写法2: colors_obj = Colors.objects.all() child_obj = Child.objects.get(name="apollo") child_obj.favor=colors_obj child_obj.save() # 让apollo喜欢黄色和蓝色 child_obj = Child.objects.get(name="apollo") # models默认只能用这种方式得到并集,如需更复杂的过滤逻辑,需使用模块Q colors_obj = Colors.objects.filter(colors__in=["蓝","黄"]) # 清空小虎已经喜欢的颜色 child_obj.favor.clear() # add是追加模式,如果当前小虎已经喜欢绿色,那么执行后,小虎会额外喜欢蓝,黄 child_obj.favor.add(*colors_obj) # 让apollo喜欢绿色 child_obj = Child.objects.get(name="apollo") colors_obj = Colors.objects.get(colors="绿") child_obj.favor.clear() # 此处没有* child_obj.favor.add(colors_obj) # 添加母表关联关系 # 让喜欢蓝色的人里添加apollo,可以用上边的方法,一个效果,让小虎喜欢蓝色,下边介绍反向插入(从母表入手)的写法 # 写法:母表对象.子表名小写_set.add(子表对象) child_obj = Child.objects.get(name="apollo") colors_obj = Colors.objects.get(colors="蓝") colors_obj.child_set.add(child_obj) # 让所有人都喜欢蓝色 children_obj = Child.objects.all() colors_obj = Colors.objects.get(colors="蓝") colors_obj.child_set.add(*children_obj) # 关于_set写法,是否已经有些晕了,究竟什么时候使用_set, # 简单记忆,只有子表才有"子表名小写_set"的写法,得到的是一个QuerySet集合,后边可以接.add(),.remove(),.update(),.delete(),.clear() # 另外,colors_obj.child_set.clear()是让所有人喜欢的颜色里去掉蓝色,colors_obj.child_set.all().delete()是删除.child_set的所有人