on_delete方法如何在Django中使用

  介绍

on_delete方法如何在Django中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

<强>一、django3.0官方文档介绍:

多对一的关系多对一关系

定义一个多对一的关系,使用django.db.models.ForeignKey。你使用它就像任何其他字段类型:包括它的类属性模型。

ForeignKey需要一个位置参数:模型相关的类。

为例,如果一辆汽车模型制造商,制造商使多个汽车但是每辆车>得到django.db  import 模型      class 制造商(models.Model):   #,才能……   ,通过      class 汽车(models.Model):   manufacturer 才能=,models.ForeignKey(制造商,on_delete=models.CASCADE)   #,才能…

,您还可以创建递归关系(一个对象本身的多对一的关系)和关系模型没有定义;有关详细信息,请参阅模型字段引用。

# 39;进行实质性的建议,但不是必需的,ForeignKey字段的名称(在上面的示例制造商)模型的名称,小写的。当然,你可以叫任何你想要的。

<强>常见的使用方式(设置为零)

class  ApiList (models.Model):=,,desc  models.CharField (max_length=255,, verbose_name=敖涌诿枋觥?=,,keyword  models.CharField (max_length=100,, verbose_name=扒肭蠊丶帧?=,,response  models.TextField (verbose_name=跋煊峁?=,,api  models.ForeignKey (Api,空白=True,, null=True,, on_delete=models.SET_NULL, verbose_name=八艚涌凇?=,,status  models.IntegerField(默认=1,verbose_name=白刺?=,,create_at  models.CharField (max_length=20, verbose_name=按唇ㄊ奔洹?=,,update_at  models.CharField (max_length=20, verbose_name=案率奔洹?

<强>

class  ForeignKey (ForeignObject):   def  __init__(才能自我,,,,on_delete,, related_name=没有,related_query_name=没有   ,,,,,,,,limit_choices_to=没有,,,parent_link=False, to_field=没有   ,,,,,,,,db_constraint=True,, * * kwargs):   ,,,超级(). __init__ (on_delete,,, from_fields=[& # 39;自我# 39;],,to_fields=[to_field], * * kwargs)

<强>一对一(一对一字段)

class 一对一字段(ForeignKey):   def 才能;__init__(自我,,,,on_delete,, to_field=没有,,* * kwargs):   ,,,kwargs[& # 39;独一无二的# 39;],=,真的   ,,,超级(). __init__ (on_delete,,, to_field=to_field, * * kwargs)

从上面外键(ForeignKey)和一对一(一对一字段)的参数中可以看的出,都有on_delete参数,而django升级到2.0之后,表与表之间关联的时候,必须要写on_delete参数,否则会报异常:

TypeError: __init__()失踪1所需的位置参数:& # 39;on_delete& # 39;

因此,整理一下on_delete参数的各个值的含义:

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

<强>多对多(ManyToManyField)

class  ManyToManyField (RelatedField):   def  __init__(才能自我,,,,related_name=没有,related_query_name=没有   ,,,,,,,,limit_choices_to=没有,对称=没有,,通过=没有   ,,,,,,,,through_fields=没有,db_constraint=True,, db_table=没有   ,,,,,,,,可切换=True,, * * kwargs):   null

on_delete方法如何在Django中使用