【Django 015】Django2.2数据模型关系之一对一(OneToOneField)

在前面的博客《【Django 005】利用ORM和sqlite数据库交互》中我们了解了数据模型的定义和迁移,以及和数据库的交互。但是就跟SQL一样,了解单个表还不够,因为现实中往往是多个表相互关联起来的。这一节开始我们就来看看两个表的三种关联关系。这一篇是第一种关系:一对一。

我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。

数据模型

Django中数据模型的关系可以用SQL中的表的关系来进行类比,共分为三类:

  • 1:1
    一对一的关系,例如一个学生对应一个学号,一个学号也只能对应一个学生。
  • 1:N
    一对多的关系,例如一个班级可以有多个学生,而一个学生只能在一个班级。
  • M:N
    多对多的关系,例如一个学生有多个课程,而每个课程也有多个学生。

一对一使用场景

通常见于对复杂表进行字段拆分,或者是在不修改现有表的情况下进行功能扩充。

一对一SQL原理

表A的主键是表B的外键,同时在表B的外键上加上UNIQUE限制,就形成了一对一关系。在下面的实例中我们可以通过数据模型的DDL来进行验证。

一对一实例操作

建立两个模型

建立两个数据模型如下,分别是员工信息和工号信息

class Employee(models.Model):
    e_name = models.CharField(max_length=16)
    e_sex = models.BooleanField(default=False)  # False means female


class EmployeeID(models.Model):
    id_num = models.CharField(max_length=25, unique=True)
    id_emp = models.OneToOneField(Employee, on_delete=models.CASCADE)

Django中通过models.OnetoOneField()来声明一个一对一关系。第一个参数是另一个模型的名字,这里表EmployeeIDid_emp字段与Employee表的主键是一一对应的。通过查看EmployeeID的DDL可以看到

create table Two_employeeid
(
    id        int auto_increment
        primary key,
    id_num    varchar(25) not null,
    id_emp_id int         not null,
    constraint id_emp_id
        unique (id_emp_id),
    constraint Two_employeeid_id_emp_id_f50ad424_fk_Two_employee_id
        foreign key (id_emp
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值