在Django框架中,模型构建的过程中,会涉及到外键设置问题,本文以订单模型为例
在设置user外键时,出现了null=True和on_delete两个参数设置,于是先查看了原始参数
查看ForeignKey源码
to、on_delete为必须参数
to:关联的表
on_delete:当该表中的某条数据删除后,关联外键的操作
related_name:反查参数,设置后可以在被关联表中通过该字段反查外键所在表,默认。
set_表名 to_field:默认主键,因为mysql只支持主键作为外键,就算你没显式的创建主键,Django会给你自动创建, 如果你是DB-first,且没创建主键:数据库默认使用隐藏字段:DB_ROW_ID作为主键
null=True
表示数据库中的所有者字段可以是null
,这意味着您可以为模型创建一个没有所有者的对象。
on_delete=models.SET_NULL
表示如果现有对象的所有者被删除,则将现有对象的此字段设置为空。
on_delete有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五个可选择的值
CASCADE:此值设置,是级联删除。
PROTECT:此值设置,是会报完整性错误。
SET_NULL:此值设置,会把外键设置为null,前提是允许为null。
SET_DEFAULT:此值设置,会把设置为外键的默认值。
SET():此值设置,会调用外面的值,可以是一个函数。