当由一个 ForeignKey 引用的对象被删除,默认情况下,Django模拟SQL的 ON DELETE CASCADE 来删除对象的 ForeignKey 关系。这样可以覆盖指定的 on_delete 参数。比如,你有一个可为空的 ForeignKey ,你想他引用的对象被删除时,该项为空。

user = models.ForeignKey(User, blank=True, null=True, on_delete=models.SET_NULL)

django.db.models 中的 on_delete 存在以下设置值:

CASCADE

级联删除默认值。

PROTECT

阻止删除 django.db.IntegrityError 的子类 ProtectedError 引用的对象。

SET_NULL

设置 ForeignKey 为空。只有 null 为 True 时才可设置。

SET_DEFAULT

设置 ForeignKey 的默认值,而且必须得设置。

SET()

设置 ForeignKey 的值传递给 SET() ,并允许可调用的对象调用它。大多数情况下通过调用是必要的,这样可以避免执行查询时models.py被导入。

def get_sentinel_user():
return User.objects.get_or_create(username='deleted')[0] class MyModel(models.Model):
user = models.ForeignKey(User, on_delete=models.SET(get_sentinel_user))

DO_NOTHING

不采取任何行动。如果你的数据库后端强制引用完整性,这将导致 IntegrityError 错误,除非手动添加SQL数据库中的 ON DELETE  字段进行约束。

ForeignKey.on_delete的更多相关文章

  1. Django文档——Model中的ForeignKey,ManyToManyField与OneToOneField

    关联关系字段 (Relationship fields) ForeignKey,ManyToManyField与OneToOneField分别在Model中定义多对一,多对多,一对一关系. 例如,一本 ...

  2. Django2.0里model外键和一对一的on_delete参数

    在django2.0后,定义外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错: TypeError: __init__() missing 1 r ...

  3. Django文档——Model中的ForeignKey,ManyToManyField与OneToOneField 关联关系字段 (Relationship fields)

    ForeignKey,ManyToManyField与OneToOneField分别在Model中定义多对一,多对多,一对一关系. 例如,一本书由一家出版社出版,一家出版社可以出版很多书.一本书由多个 ...

  4. django初探-创建简单的博客系统

    django第一步 1. django安装 pip install django print(django.get_version()) 查看django版本 2. 创建项目 打开cmd,进入指定目录 ...

  5. Django Model field reference

    ===================== Model field reference ===================== .. module:: django.db.models.field ...

  6. ORM(二)常用字段小记

    常用字段类型: AutoField:字段自增,多用于ID主键字段,每个表中只能有一个AutoField字段类型. id = models.AutoField(primary_key=True) # 设 ...

  7. python--第二十三天总结(一对多和多对多)

    Django 的 ORM 有多种关系:一对一,多对一,多对多. 各自定义的方式为 :        一对一: OneToOneField        多对一: ForeignKey        多 ...

  8. (admin.E108) The value of 'list_display[4]'报错解决方案

    参考资料:虫师-<web接口开发与自动化测试:基于python语言> 日常学习Django框架中,创建了用户模型,但是页面功能验证时候,提示不能进行列表字段操作,debug好久,才找到问题 ...

  9. djjango models表关系

    *** detail表级联 student表,detail获取student的学生信息,自己做为扩展 一对一关系 models.OneToOneField student = models.OneTo ...

随机推荐

  1. c++打印环境变量

    直接上代码:cpp版本 #include <stdio.h> #include <stdlib.h> #include <string.h> extern char ...

  2. 权威指南之脚本化jquery

    jqury函数 jquery()($())有4种不同的调用方式 第一种是最常用的调用方式是传递css选择器(字符串)给$()方法.当通过这种方式调用时,$()方法会返回当前文档中匹配该选择器的元素集. ...

  3. VIM中格式化json

    在vim输入以下命令就可以格式化:%!python -m json.tool可以在~/.vimrc增加快捷键map <F4><Esc>:%!python -m json.too ...

  4. MMDrawerController 的实践,已经实现,几行简单的代码实现侧栏

    学习方法,看readme,看给的Demo 看功能怎么实现的去模仿,个人感觉模仿是最快的学习方法 废话少说,上代码 导入MMDrawerController框架我就不多少了,之后做什么才是我们才关注的事 ...

  5. C++_基础_类和对象

    内容: (1)引用 (2)类型转换 (3)C++社区给C程序员的建议 (4)面向对象编程的概念 (5)类和对象 (6)构造函数 (7)初始化列表及其必要性 1.引用1.1 指针和引用的使用说明(1)指 ...

  6. Hadoop经典面试题(转)

    单项选择题 1. 下面哪个程序负责 HDFS 数据存储. a)NameNode b)Jobtracker c)Datanode d)secondaryNameNode e)tasktracker 2. ...

  7. TextView settextcolor 无效解决方案

    viHolder.order_item_tipcolor.setBackgroundColor(context .getResources().getColor(R.color.order_xixie ...

  8. 【LeetCode题意分析&解答】36. Valid Sudoku

    Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...

  9. oracle查询字符集语句

      (1)查看字符集(三条都是等价的) 复制代码 代码如下: select * from v$nls_parameters  where parameter='NLS_CHARACTERSET'sel ...

  10. Address already in use: JVM_Bind错误的解决

    1,独立运行的Tomcat没有关闭. 自安装的tomcat程序设置开机自动运行,或者在之前运行过,先关闭ecplipse或jbuilder,在任务管理器中找到Tomcat的进程,将其 kill掉,即可 ...