一、多表模型创建
1.数据库中的表关系
在数据库中表与表之间的关系分:一对一,一对多,多对多
- 一对一的表关系通过外键+唯一约束表示
- 一对多的表关系通过外键约束来表示,一对多和多对一是相对而言的。
- 多对多的表关系通过建立第三张表设置外键来表示
2.ORM中的类关系模型
在orm中,表与表之间的关系通过类名来建立,类名中定义属性关联另一个类。
- 一对一的类关系通过OneToOneField()来建立
- 一对多的类关系通过ForeignKey()来建立
- 多对多的类关系通过ManyToManyField()来建立
orm中模型建立models.py文件
orm中model.py文件
from django.db import models
# Create your models here.
class Author(models.Model):
id = models.AutoField(primary_key=True) # 可以省略
name = models.CharField(max_length=32)
age = models.IntegerField()
class Publish(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
# 一对一关系建立,本质就是foreignkey+unique,orm中会自动给这个字段拼接一个_id。
authorDetail = models.OneToOneField(to="PublishDetail", to_field="id", on_delete=models.CASCADE) # 设置联级更新,默认选项
class PublishDetail(models.Model):
id = models.AutoField(primary_key=True)
telephone = models.BigIntegerField()
city = models.CharField(max_length=32)
class Book(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=32)
price = models.DecimalField(max_digits=5,decimal_places=2)
# 多对一关系,外键关联出版社表
publish = models.ForeignKey(to="Publish", to_field="id", on_delete=models.CASCADE)
# 建立表之间的多对多关系
authors=models.ManyToManyField(to="Author") # mysql中需要我们手动建立第三张表,而orm中自动帮我们建立第三张表
注意
- 一对多表关系建立,外键字段建立在多的一方
- 多对多表关系中,外键会默认关联表的主键id,第三张表创建方式有多种。
- 创建多对多的authors名字,并不会在Book表中生成对应字段,而authors是用于多表查询的。
创建第三张表的方式
1.手动创建
class Book(models.Model):
title = models.CharField(max_length=