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")

添加数据后的:

Django|Django 数据库 外键和表的关系
文章图片
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 表的主键)的组合。

    推荐阅读