这里的系统环境为django1.6 os为win7javascript
今天有个需求说的是添加一个地区表,而后用外键和几个很是重要的实体表来作关联(地区表做为其余表的外键),写完地区的删除操做的时候,测试了下代码,功能正常。但是眼睛移动到控制台输出的时候傻了java
connexesql ->DELETE FROM `mngm_device` WHERE `mngm_device`.`area_id` IN (%s, %s, %s) connexesql ->DELETE FROM `ad_ad` WHERE `ad_ad`.`area_id` IN (%s, %s, %s) connexesql ->DELETE FROM `mngm_area` WHERE `id` IN (%s, %s, %s)
因而查询了下django orm中models中关于每一个field定义的档, https://docs.djangoproject.com/en/1.6/ref/models/fields/#django.db.models.ForeignKey 。 而后把字段定义修改为以下:python
user = models.ForeignKey(User, blank=True, null=True, on_delete=models.SET_NULL)
django中外键小常识:
* 外键关联的是一个对象,自动生成的外键名称会在关联的对象的名称后面加上个 "_id" 来做为字段名称
* 默认状况下,外键会自动建立索引,会自动作级联删除, 默认的外键是字段是那张 表的主键sql
models.SET_NULL这里还有其余几个选项:数据库
* SET_NULL 当外键的字段被删除的时候设置为null前提是指定了 null=Truedjango
* CASCADE 默认的选项,当外键关联的字段删除的时候,全部其余表级联删除框架
* SET_DEFAULT 设置一个默认值,当关联的记录删除的时候恢复成默认值函数
*DO_NOTHING django不作任何事情,数据库返回什么就报什么测试
* SET()¶ 还能够set一个函数,当关联记录删除的时候触发获得一个值spa
对于orm或者说框架,总有不少默认设置,当咱们开发的时候必定要多测试多查阅文档才能更好的使用,不至于犯下一些惊人的错误。
本文出自 “orangleliu笔记本” 博客,转载请务必保留此出处http://blog.csdn.net/orangleliu/article/details/40268495