ForeignKey 的on_delete 参数
on_delete 可以选择的参数
models.CASCADE # 级联删除,注意使用时机,需要强关联性的才使用这个 用户和用户详情 课程和课程章节
models.SET_NULL # 删除分类,课程这个字段设置为空,要有null=True参数的配合
models.SET_DEFAULT # 删除分类,课程这个字段设置为默认值,要有 defalut=xx参数的配合
models.DO_NOTHING # 删除分类,课程这个字段什么都不做,原来是什么值就是什么值
models.SET(值,函数内存地址) # 删除分类,课程这个字段设置为写的值,或者执行内部传入的函数,函数返回值放在这
ForeignKey 的db_constraint=False
默认为True, 如果 db_constraint=False 只建立逻辑外键,不建立物理外键
没有外键约束,如果这样设置,修改,新增速度快,但是可能会出现脏数据(程序层面控制)
连表查询没有任何区别,其他操作完全一致
ForeignKey 的 related_name='表名'
基于对象的跨表查询
正向: 对象.字段 course.course_category 根据课程拿到了课程分类对象, course_category在表内部,就是正向
反向: 对象.表名小写 (一对一)或者 对象.表名小写_set.all() (一对多) 字段在表中没有,但是有关联关系
related_name:
为了替换原来基于对象的跨表查反向查询 表名小写 或 表名小写_set.all() 的
related_query_name
为了替换原来__连表查询,中表名小写,现在直接用related_query_name指定的字符串即可