青菜

注册

 

发新话题 回复该主题

Django数据表关联关系映射一对一 [复制链接]

1#
北京哪家看白癜风比较好         http://wapyyk.39.net/bj/zhuanke/89ac7.html

我们知道涉及到数据表之间的对应关系就会想到一对一、一对多、多对多,在学习MySQL数据库时表关系设计是需要重点掌握的知识。Django中定义了三种关系类型的字段用来描述数据库表的关联关系:一对多(Foreignkey)、一对一(OneToOneFiled)、以及多对多(ManyToManyFiled),在本节我们对它们做简单的介绍。

1.一对多关系类型

这种类型在数据库中体现是外键关联关系,它在和其他的Model建立关联同时也和自己建立关联,用来描述一对多的关系,例如一个作者可以写很多不同的书,但是这些书又只能对应这一个作者,再比如一本图书只能属于一个出版社,一个出版社可以出版很多不同种类的图书,这就是一对多的关系。Django会自动将字段的名称添加“_id”作为列名,ForgienKey的定义如下:

classdjango.db,model.ForeignKey(to,on_delete,**options)

1)必填参数

它有两个必填参数。to,指定所关联的Model,它的中取值可以是直接引用其他的Model,也可以是Model所对应的字符串名称;on_delete,当删除关联表的数据时,Django将根据这个参数设定的值确定应该执行什么样的SQL约束。on_delete可以理解为MySQL外键的级联动作,当主表执行删除操作时对子表的影响,即子表要执行的操作,Django提供的可选值如下所示:

CASCADE,级联删除,它是大部分ForeignKey的定义时选择的约束。它的表现是删除了“主”,则“子”也会被自动删除。

PROTECT,删除被引用对象时,将会抛出ProtectedError异常。当主表被一个或多个子表关联时,主表被删除则会抛出异常。

SET_NULL,设置删除对象所关联的外键字段为null,但前提是设置了选项null为True,否则会抛出异常。

SET_DEFAULT:将外键字段设置为默认值,但前提是设置了default选项,且指向的对象是存在的。

SET(value):删除被引用对象时,设置外键字段为value。value如果是一个可调用对象,那么就会被设置为调用后的结果。

DO_NOTHING:不做任何处理。但是,由于数据表之间存在引用关系,删除关联数据,会造成数据库抛出异常。

2)可选参数

除了必填参数以外,ForeignKey还有一些常用的可选参数需要

分享 转发
TOP
发新话题 回复该主题