对django2.0 关联表的必填on_delete参数的含义解析
一对多(ForeignKey)
classForeignKey(ForeignObject): def__init__(self,to,on_delete,related_name=None,related_query_name=None, limit_choices_to=None,parent_link=False,to_field=None, db_constraint=True,**kwargs): super().__init__(to,on_delete,from_fields=['self'],to_fields=[to_field],**kwargs)
一对一(OneToOneField)
classOneToOneField(ForeignKey): def__init__(self,to,on_delete,to_field=None,**kwargs): kwargs['unique']=True super().__init__(to,on_delete,to_field=to_field,**kwargs)
从上面外键(ForeignKey)和一对一(OneToOneField)的参数中可以看出,都有on_delete参数,而django升级到2.0之后,表与表之间关联的时候,必须要写on_delete参数,否则会报异常:
TypeError:__init__()missing1requiredpositionalargument:'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(可执行对象)
多对多(ManyToManyField)
classManyToManyField(RelatedField): def__init__(self,to,related_name=None,related_query_name=None, limit_choices_to=None,symmetrical=None,through=None, through_fields=None,db_constraint=True,db_table=None, swappable=True,**kwargs): super().__init__(**kwargs)
因为多对多(ManyToManyField)没有on_delete参数,所以略过不提.
以上这篇对django2.0关联表的必填on_delete参数的含义解析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。