一、数据表关联
1、一对多
表之间以对多的关系就是数据库中的 “外键” ,下面我们举个例子,比如一个医药系统中肯定会有客户的信息吧,我们先定义一个客户的基本信息(客户名称、联系电话、居住地址)
vi Django_demo/paas/models.py
class Customer(models.Model):
# 客户名称
name = models.CharField(max_length=200)
# 联系电话
phonenumber = models.CharField(max_length=200)
# 地址
address = models.CharField(max_length=200)
我们是一个医药系统,肯定存在很多不同的药品类型,同样也需要定义一个药品类型的表
Medicine药品表 ,包含一些(药品名称、编号、描述信息)
vi Django_demo/paas/models.py
class Medicine(models.Model):
# 药品名
name = models.CharField(max_length=200)
# 药品编号
sn = models.CharField(max_length=200)
# 描述
desc = models.CharField(max_length=200)
有了药品信息、客户信息,那么只要存在销售的话就一定会有订单信息
想一想,我们订单的信息是不是和上面的两张表多少有一些关联,比如订单中需要用到客户信息和药品信息
在实际观察中,我们发现订单表里面会同时需要拿到上面两张表中的数据,在下图中我们可以看到一个客户同时可能会有多个订单,这种情况就是一对多,或者说多对一
像是这种一对多的关系,在数据库中是以外键形式表示的,如果说一个表中的字段是外键,那么他的值一定来源与其他表的主键
另外,我们定义表的 Model类的时候,如果没有指定主键字段,migrate 的时候 Django 会为该Model对应的数据库表自动生成一个id字段,作为主键
#导入数据库
python manage.py makemigrations
python manage.py migrate
#查看
desc paas_customer;
**现在我们要生成订单表,按照实际情况我们订单表的字段里面也会有客户的信息表示谁下的订单,而用户的信息需要使用外键去关联客户的主键,而客户表也就是customer表的主键就是id字段,**Django中定义外键 的方法就是 Model类的该属性字段 值为
(ForeignKey)
vi Django_demo/paas/models.py
import datetime
class Order(models.Model):
# 订单名
name = models.CharField(max_length=200,null=True,blank=True)
# 创建日期
create_date = models.DateTimeField(default=datetime.datetime.now)
# 客户
customer = models.ForeignKey(Customer,on_delete=models.PROTECT)
上面定义的customer是外键,让他去找Customer表的主键获取数据,而这里设置了一个on_delete的参数,