外键值 on_delete / db_constraint

时间:2019-10-31
本文章向大家介绍外键值 on_delete / db_constraint,主要包括外键值 on_delete / db_constraint使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#on_delete=None, #当关联的email数据被删除时候,该数据也会被删除,不存在
        #on_delete=models.CASCADE, #性质和None一样是默认删除

        #on_delete=models.DO_NOTHING,   #当关联的数据被删除时,自己不受影响,什么事都不做,不会报错

        #on_delete=models.PROTECT,   #关联保护,因为邮箱数据被用户表关联,所以该邮箱不允许被删除,并且触发ProtectError
        #Cannot delete some instances of model 'EmailInfo' because they are referenced through a protected foreign key: 'UserInfo.el'", <QuerySet [<UserInfo: UserInfo object>]>

        #on_delete=models.SET_NULL, #删除关联数据,自己被设置为null(前提字段需要设置为可空null=True)
        #对于测试models.SET_NULL时,我们需要先了解,对于数据库的基本字段设置,像null,max_length这些属性,我们需要重新去生成数据表,
        #对于on_delete等Django中的附属属性,我们可以动态修改,不需要重新生成数据表,所以如果我们开始并没有设置null=True(默认false),我们需要去重新生成数据表

        #on_delete=models.SET_DEFAULT,#删除关联数据后,会将自己的数据设置为默认值,需要设置default属性

        #on_delete=models.SET(3)   #和SET_DEFAULT相似,只不过不需要设置默认值,在SET()中可以直接设置
        on_delete=models.SET(set_test) #和SET一样,只不过值设为了回调函数,需要将函数设为全局,可调用

db_constraint=False,这个就是保留跨表查询的便利(双下划线跨表查询```),但是不用约束字段了,一半公司都用false,这样就省的报错,因为没有了约束(Field字段对象,既约束,又建立表与表之间的关系)

原文地址:https://www.cnblogs.com/Hale-wang/p/11770866.html