Django|Django 数据库 外键和表的关系
两张表的关联操作 一、创建表
#book/model.py
class Category(models.Model):
name = models.CharField(max_length=100)class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
#on_delete是设置两张表的级别,CASCADE为级别关联(同app下的设置外键)
category = models.ForeignKey("Category",on_delete=models.CASCADE)
#对front下的Front表设置外键
autor = models.ForeignKey("front.Front",on_delete=models.CASCADE,null=True)
2.创建另一个app下的表
front/model.py
class Front(models.Model):
username = models.CharField(max_length=100)
3.添加表数据
#book/views.py
def index(request):
article = Article(title='abc',content='111')
category = Category(name='最新文章')
category.save()
article.category = category
article.save()
return HttpResponse("seccess")
添加数据后的:
文章图片
image.png 4.另一种添加表数据:
def one_to_many_view(request):
category = Category.objects.first()
article = Article(title='大神片', content='没得看')
article.author = Front.objects.first()
#bulk的作用在于:自动保存数据库article,category
category.articles.add(article,bulk=False)
return HttpResponse("success")
二、表关系 可以在数据库图表中的表之间创建关系,以显示一个表中的列与另一个表中的列是如何相链接的。表关系包含以下三种:
1、一对一 在一对一关系中,A 表中的一行最多只能匹配于 B 表中的一行,反之亦然。
如果相关列都是主键或都具有唯一约束,则可以创建一对一关系。
2、一对多 一对多关系是最普通的一种关系。
在这种关系中,
A 表中的一行可以匹配 B 表中的多行,但是 B 表中的一行只能匹配 A 表中的一行。
例如,publishers 和 titles 表之间具有一对多关系:
每个出版社出版很多书,但是每本书名只能出自一个出版社。
3、多对多 【Django|Django 数据库 外键和表的关系】在多对多关系中,A 表中的一行可以匹配 B 表中的多行,反之亦然。
要创建这种关系,需要定义第三个表,称为结合表,
它的主键由 A 表和 B 表的外部键组成。
例如,authors 和 titles 表具有多对多关系,
这是由于这些表都与 titleauthors表具有一对多关系。
titleauthors 表的主键是 au_id 列(authors 表的主键)和 title_id 列(titles 表的主键)的组合。
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- django-前后端交互
- 数据库设计与优化
- 数据库总结语句
- MySql数据库备份与恢复
- 数据库|SQL行转列方式优化查询性能实践
- MySQL数据库的基本操作
- springboot整合数据库连接池-->druid
- Android|Android sqlite3数据库入门系列
- Python3|Python3 MySQL 数据库连接