经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Django » 查看文章
Django的models中on_delete参数详解
来源:jb51  时间:2019/7/16 9:03:20  对本文有异议

在Django2.0以上的版本中,创建外键和一对一关系必须定义on_delete参数,我们可以在其源码中看到相关信息

  1. class ForeignKey(ForeignObject):
  2. """
  3. Provide a many-to-one relation by adding a column to the local model
  4. to hold the remote value.
  5.  
  6. By default ForeignKey will target the pk of the remote model but this
  7. behavior can be changed by using the ``to_field`` argument.
  8. """
  9.  
  10. # Field flags
  11. many_to_many = False
  12. many_to_one = True
  13. one_to_many = False
  14. one_to_one = False
  15.  
  16. rel_class = ManyToOneRel
  17.  
  18. empty_strings_allowed = False
  19. default_error_messages = {
  20. 'invalid': _('%(model)s instance with %(field)s %(value)r does not exist.')
  21. }
  22. description = _("Foreign Key (type determined by related field)")
  23.  
  24. def __init__(self, to, on_delete, related_name=None, related_query_name=None,
  25. limit_choices_to=None, parent_link=False, to_field=None,
  26. db_constraint=True, **kwargs):
  27.  
  • 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(): 自定义一个值,该值当然只能是对应的实体

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号