zoukankan      html  css  js  c++  java
  • python django中的orm外键级联删除

    今天添加了一个路由表,路由表做外键,然后添加了几个组,路由表为组的外键,当我使用删除功能对路由表进行删除时,竞然将我的组也相当的删除了;尽管这是测试,但放到生产环境中还是会发生意外的;这个问题要解决;

    在网上查了一下资料,问题主要是django orm的field字段有关;

    routemgr = models.ForeignKey('Routemgr',default=1,blank=True,null=True,on_delete=models.SET_NULL)

    主要意思就是把Routemgr这个ForeignKey的字段设置为null 并使用 python manage.py makemigrations 与 python manage.py migrate 进行数据迁移;这样设置成功后再删除就只是把routemgr对应的字段删除而不是它所关联的整个实体了;

    关于ForeignKey.on_delete的几个选项;

    当一个model对象的ForeignKey关联的对象被删除时,默认情况下此对象也会一起被级联删除的。

    CASCADE:默认值,model对象会和ForeignKey关联对象一起被删除

    SET_NULL:将model对象的ForeignKey字段设为null。当然需要将null设为True。

    SET_DEFAULT:将model对象的ForeignKey字段设为默认值。

    Protect:删除ForeignKey关联对象时会生成一个ProtectedError,这样ForeignKey关联对象就不会被删除了。

  • 相关阅读:
    c#隐藏和重写基类方法的区别
    c#事件(续委托之后)
    c# 中接口和抽象类的区别
    call 和apply 的一个记录
    string 和 stringbuilder 的区别
    传值和传引用
    值类型和引用类型
    标签选择器与字体连写
    input表单案例
    codeforces 676B B. Pyramid of Glasses(模拟)
  • 原文地址:https://www.cnblogs.com/hsggj/p/9042468.html
Copyright © 2011-2022 走看看