Django的models中on_delete参数详解
在Django2.0以上的版本中,创建外键和一对一关系必须定义on_delete参数,我们可以在其源码中看到相关信息
class ForeignKey(ForeignObject): """ Provide a many-to-one relation by adding a column to the local model to hold the remote value. By default ForeignKey will target the pk of the remote model but this behavior can be changed by using the ``to_field`` argument. """ # Field flags many_to_many = False many_to_one = True one_to_many = False one_to_one = False rel_class = ManyToOneRel empty_strings_allowed = False default_error_messages = { 'invalid': _('%(model)s instance with %(field)s %(value)r does not exist.') } description = _("Foreign Key (type determined by related field)") 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):
- to:关联的表
- on_delete:当该表中的某条数据删除后,关联外键的操作
- related_name:反查参数,设置后可以在被关联表中通过该字段反查外键所在表,默认:set_表名
- to_field:默认主键,因为mysql只支持主键作为外键,就算你没显式的创建主键,Django会给你自动创建,如果你是DB-first,且没创建主键:数据库默认使用隐藏字段:DB_ROW_ID作为主键
on_delete参数设置
CASCADE:级联删除,当关联表中的数据删除时,该外键也删除
PROTECT: 保护模式,如果采用该选项,删除的时候,会抛出ProtectedError错误。
SET_NULL: 置空模式,删除的时候,外键字段被设置为空,前提就是blank=True, null=True,定义该字段的时候,允许为空。
SET_DEFAULT: 设置默认值,删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。
SET(): 自定义一个值,该值当然只能是对应的实体
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
Django中反向生成models.py的实例讲解
命令行中进入Django项目目录,执行 python manage.py inspectdb testmodel_test 其中testmodel_test为数据表,生成的结果 from django.db import models class TestmodelTest(models.Model): name = models.CharField(max_length=20) c1 = models.CharField(max_length=255, blank=True, null=Tru
-
浅谈Django中的数据库模型类-models.py(一对一的关系)
如下所示: # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import models # Create your models here. # 一对一关系:数据库中两个表中数据的对应关系 # 一个账户对应着一个联系人,而一个联系人有一个账户 # 一对一关系是通过在两个表之间定义相同的主键来完成 class Account(models.Model): username = models
-
Django 根据数据模型models创建数据表的实例
如果使用默认的数据库 SQLite3,则无需配置settings.py 使用其他数据库,则需要配置settings.py,这里以Mysql为例: DATABASES = { 'default': { 'ENGINE':'django.db.backends.mysql', 'NAME':'webapp',#数据库名 'USER':'test1',#用户名 'PASSWORD':'123456',#密码 'HOST':'127.0.0.1', 'PORT':'3306', } } 在models.
-
django1.11.1 models 数据库同步方法
在django1.9之前,数据库同步只需要一条命令:python manage.py syncdb 在djang1.9以后,数据库同步执行指令如下: 同步数据库接口(注意需要切换至python project工作空间所在路径) python manage.py makemigrations 同步数据 python manage.py migrations 最后登入http://localhost:8080/admin 发现,已经创建数据库表. windows10 cmd窗口指令 D:\user_
-
Django的models模型的具体使用
model的常用字段 V=models.CharField(max_length=None[, **options]) #varchar V=models.EmailField([max_length=75, **options]) #varchar V=models.URLField([verify_exists=True, max_length=200, **options]) #varchar V=models.FileField(upload_to=None[, max_length=1
-
Django的models中on_delete参数详解
在Django2.0以上的版本中,创建外键和一对一关系必须定义on_delete参数,我们可以在其源码中看到相关信息 class ForeignKey(ForeignObject): """ Provide a many-to-one relation by adding a column to the local model to hold the remote value. By default ForeignKey will target the pk of the r
-
Django数据模型中on_delete使用详解
on_delete属性针对外键ForeignKey 一.django3.0官方文档介绍: Many-to-one relationships多对一关系 To define a many-to-one relationship, use django.db.models.ForeignKey. You use it just like any other Field type: by including it as a class attribute of your model. ForeignK
-
Django框架models使用group by详解
Django框架models使用group by详解: 首先,看下列代码: UserData.objects.filter(hubid=sensorid,time__range=(time2,time1)).values('hour').annotate(sum_out=Sum('outdoor'), sum_in=Sum('indoor'), sum_eat=Sum('kitchen'), sum_wash=Sum('toilet')).order_by('hour') 上述代码相当于sql语
-
Django模板标签中url使用详解(url跳转到指定页面)
django {% url %} 模板标签使用 inclusions/_archives.html ... {% for date in date_list %} <li> <a href="{% url 'blog:archive' date.year date.month %}" rel="external nofollow" > {{ date.year }} 年 {{ date.month }} 月 </a> </l
-
scrapy爬虫:scrapy.FormRequest中formdata参数详解
1. 背景 在网页爬取的时候,有时候会使用scrapy.FormRequest向目标网站提交数据(表单提交).参照scrapy官方文档的标准写法是: # header信息 unicornHeader = { 'Host': 'www.example.com', 'Referer': 'http://www.example.com/', } # 表单需要提交的数据 myFormData = {'name': 'John Doe', 'age': '27'} # 自定义信息,向下层响应(respon
-
node获取命令行中的参数详解
目录 认识process process.arg 封装获取参数函数 认识process 在开发cli工具时,往往离不开获取指令中各种参数信息,接下来本文将带着你如何在Node.js中获取执行时的参数 process是nodejs内置的一个对象,该对象提供了当前有关nodejs进程的信息.(例如获取当前进程id,执行平台等与当前执行进程相关的对象和方法) node process文档 process.arg 在该对象中,有一个arg属性,它可以获取当前node执行时传入各个参数数据. 我们创建一个
-
Python Django获取URL中的数据详解
目录 Django获取URL中的数据 URL路径参数 使用path函数 使用re_path函数 URL关键字形式 总结 Django获取URL中的数据 URL中的参数一般有两种形式.如下所示: 1. https://zy010101.blog.csdn.net/article/details/120816954 2. https://so.csdn.net/so/search?q=Django&t=blog&u=zy010101 我们将第一种形式称为"URL路径参数":
-
MySQL中slave_exec_mode参数详解
今天无意当中看到参数slave_exec_mode,从手册里的说明看出该参数和MySQL复制相关,是可以动态修改的变量,默认是STRICT模式(严格模式),可选值有IDEMPOTENT模式(幂等模式).设置成IDEMPOTENT模式可以让从库避免1032(从库上不存在的键)和1062(重复键,需要存在主键或则唯一键)的错误,该模式只有在ROW EVENT的binlog模式下生效,在STATEMENT EVENT的binlog模式下无效.IDEMPOTENT模式主要用于多主复制和NDB CLUST
-
Django单元测试中Fixtures用法详解
在使用单元测试时,有时候需要测试数据库中有数据,这时我们可以使用Django的Fixtures来生成测试数据. Django是一个开放源代码的Web应用框架,由Python写成.采用了MVT的软件设计模式,即模型Model,视图View和模板Template.2005年7月在BSD许可证下发布. 在对Django项目做单元测试时,经常需要生成或者导入一些初始数据.对于已经有数据存在于正式数据库的app来说,使用Fixture 载入数据,是最简便有效的方法. 本文通过配置myapp.json,te
-
Django models filter筛选条件详解
条件选取querySet的时候,filter表示=,exclude表示!=. querySet.distinct() 去重复 __exact 精确等于 like 'aaa' __iexact 精确等于 忽略大小写 ilike 'aaa' __contains 包含 like '%aaa%' __icontains 包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains. __gt 大于 __gte 大于等于 __lt 小于 __
随机推荐
- js调用Flex中的方法并向flex中传参及flex调用js示例
- jQuery EasyUI 布局之动态添加tabs标签页
- Vue.js仿Metronic高级表格(二)数据渲染
- Maven下载和配置环境教程
- ASP.NET 程序员都非常有用的85个工具
- PHP浮点数的一个常见问题
- yii2中的rules 自定义验证规则详解
- Python的爬虫框架scrapy用21行代码写一个爬虫
- Python编程之字符串模板(Template)用法实例分析
- Linux系统MySQL忘记密码,重置密码,忽略表名、列名大小写的方法
- 浅析php中array_map和array_walk的使用对比
- JS与HTML结合实现流程进度展示条思路详解
- Myeclipse连接mysql数据库心得体会
- Javascript中的delete操作符详细介绍
- 服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu
- Almp 安卓系统上搭建本地php服务器环境的步骤
- java组件smartupload实现上传文件功能
- 寻找二叉树最远的叶子结点(实例讲解)
- 易语言通过模拟的方式实现对微信的视频图片消息发送的代码
- VMware 12 下 Ubuntu 16.04 安装图文教程