当前位置: 代码迷 >> 综合 >> 【2019.05.26】python3.7+ Django2.2 foreignKey参数详细说明 (on_delete)
  详细解决方案

【2019.05.26】python3.7+ Django2.2 foreignKey参数详细说明 (on_delete)

热度:77   发布时间:2023-12-22 22:46:55.0

引言

  • 在django2.0之前创建外键foreignKey的参数on_delete是有默认值的,所以这个参数可以不用填,但在2.0之后on_delete没有默认值了,所以这个参数一定要传,不然就报以下的错:

TypeError: init() missing 1 required positional argument: on_delete
所以现在就来说一下关于这个on_delete要传的参数所代表的含义

on_delete

on_delete=None,               # 删除关联表中的数据时,当前表与其关联的field的行为
on_delete=models.CASCADE,     # 删除关联数据,与之关联也删除
on_delete=models.DO_NOTHING,  # 删除关联数据,什么也不做
on_delete=models.PROTECT,     # 删除关联数据,引发错误ProtectedError
# models.ForeignKey('关联表', on_delete=models.SET_NULL, blank=True, null=True)
on_delete=models.SET_NULL,    # 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空,一对一同理)
# models.ForeignKey('关联表', on_delete=models.SET_DEFAULT, default='默认值')
on_delete=models.SET_DEFAULT, # 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值,一对一同理)
on_delete=models.SET,         # 删除关联数据,a. 与之关联的值设置为指定值,设置:models.SET(值)b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)

举例

class BookInfo(models.Model):"""图书模型类"""# 图书名称btitle = models.CharField(max_length=20)# 出版日期bpub_date = models.DateField()# 阅读量bred = models.ImageField(default=0)# 评论量bcomment = models.IntegerField(default=0)# 删除标记(不做真正的删除)is_Delete = models.BooleanField(default=False)# 多类
class HeroInfo(models.Model):"""英雄人物模型类"""# 英雄名称hname = models.CharField(max_length=20)# 性别hgender = models.BooleanField(default=False)# 备注hcomment = models.CharField(max_length=200)# 关系属性hbook = models.ForeignKey('BookInfo', on_delete=models.CASCADE)# 删除标记(不做真正的删除)is_Delete = models.BooleanField(default=False)

1、ForeignKey 表示设置外健
2、to_field表示外健关联的主键
3、on_delete有多个选项

  相关解决方案