Django ORM删除多对多表关系


删除多对多表关系 :
# 删除子表与母表关联关系,让小虎不喜欢任何颜色
# 写法1:
child_obj = Child.objects.get(name="apollo")
colors_obj = Colors.objects.all()
child_obj.favor=''
child_obj.save()
# 写法2:
child_obj = Child.objects.get(name="apollo")
colors_obj = Colors.objects.all()
child_obj.favor.remove(*colors_obj)
# 写法3:
child_obj = Child.objects.get(name="apollo")
child_obj.favor.clear()

# 删除母表与子表关联关系,让所有人不再喜欢蓝色
# 写法1:
children_obj = Child.objects.all()
colors_obj = Colors.objects.get(colors="")
colors_obj.child_set.remove(*children_obj)
# 写法2:
colors_obj = Colors.objects.get(colors="")
colors_obj.child_set.clear()

#删除子表数据,喜欢蓝色的所有人都删掉
colors_obj = Colors.objects.get(colors="")
colors_obj.child_set.all().delete()  #注意有.all()
#删除所有child
Child.objects.all().delete()


删除母表数据:
默认情况下,如此例中,删除红色,那么子表与颜色表是一对一或外键关系的,子表对应数据会自动删除,
如:红球,apollo与颜色表是多对多关系的话,不会自动删除喜欢红色的人,而是去掉红色已选.
如果想让与母表外键关联的子表在删除外键之后依旧可以保留子表数据,需要子表建表时加入以下字段:
class Clothes(models.Model):
    color=ForeignKey("Colors",null=True,on_delete=models.SET_NULL))  
    #可为空,如果外键被删后,子表数据此字段置空而不是直接删除这条数据,同理也可以SET_DEFAULT,需要此字段有默认值
    description=models.CharField(max_length=10)  #描述 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM