django on_delete属性
Posted rongze-blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django on_delete属性相关的知识,希望对你有一定的参考价值。
今天在给stdent创建class外键时发生了error
TypeError: __init__() missing 1 required positional argument: ‘on_delete‘
原码:
stu_Class=models.ForeignKey(to="Class",to_field="nid")
错误原因:
在Django2.0后,定义外键和一对一关系的时候需要加on_delete选项,他是它将是Django 2.0中的必需参数。
修改后代码:
stu_Class = models.ForeignKey(to="Class", to_field="nid", on_delete=models.CASCADE)
Django官方文档对on_delete参数的解释
CASCADE
-
级联删除。Django模拟SQL约束ON DELETE CASCADE的行为,并删除包含ForeignKey的对象。
Model.delete()
不会在相关模型上调用,但 会为所有已删除的对象发送pre_delete
和post_delete
信号。
PROTECT
-
通过引发
ProtectedError
子类来 防止删除引用的对象django.db.IntegrityError
。
SET_NULL
-
设置
ForeignKey
null; 这是如果只可能null
是True
。
SET_DEFAULT
-
将
ForeignKey
其设置为默认值;ForeignKey
必须设置的默认值 。
SET
()-
设置
ForeignKey
传递给的值SET()
,或者如果传入了callable,则调用它的结果。在大多数情况下,为了避免在导入models.py时执行查询,必须传递callable:
-
CASCADE
:删除引用的对象时,也删除引用它的对象(例如,当您删除博客文章时,您可能也想删除注释)。SQL等价物:CASCADE
。PROTECT
:禁止删除引用的对象。要删除它,您必须删除手动引用它的所有对象。SQL等价物:RESTRICT
。SET_NULL
:将引用设置为NULL(要求字段可以为空)。例如,当您删除用户时,您可能希望保留他在博客帖子上发布的评论,但是说它是由匿名(或已删除)用户发布的。SQL等价物:SET NULL
。SET_DEFAULT
:设置默认值。SQL等价物:SET DEFAULT
。SET(...)
:设置给定值。这个不是SQL标准的一部分,完全由Django处理。DO_NOTHING
:可能是一个非常糟糕的主意,因为这会在数据库中创建完整性问题(引用实际上不存在的对象)。SQL等价物:NO ACTION
。
以上是关于django on_delete属性的主要内容,如果未能解决你的问题,请参考以下文章
Django在使用models生成数据库表时报错: __init__() missing 1 required positional argument: 'on_delete'
如何使用 on_delete 属性在用户模型的外键字段中设置用户全名?
django数据模型中关于on_delete, db_constraint的参数说明
django数据模型on_delete, db_constraint的使用
Django 中创建Model时报以下错误: TypeError: init() missing 1 required positional argument: ‘on_delete’
Django在根据models生成数据库表时报 __init__() missing 1 required positional argument: 'on_delete'