Django ORM - 多表实例学习笔记

一、关联表的创建

在 Django 中,我们可以创建多个表,这些表之间的关系可以通过 ForeignKey 和 ManyToManyField 来建立。

以一个博客系统为例,假设我们需要创建两个表,一个是用户表,另一个是文章表。每个用户会对应多篇文章,这两个表之间是一对多的关系。

1. 用户表

pythonCopy Code
from django.db import models class User(models.Model): name = models.CharField(max_length=50) email = models.EmailField()

2. 文章表

pythonCopy Code
from django.db import models from .models import User class Article(models.Model): title = models.CharField(max_length=100) content = models.TextField() author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='articles')

在文章表中,我们通过 ForeignKey 来建立与用户表 User 的关系,on_delete=models.CASCADE 表示当 User 数据被删除时,相关的 Article 数据也会被删除,related_name='articles' 表示我们可以通过 user.articles 来访问与该用户相关的所有文章。

二、查询数据

假设我们已经在数据库中创建了以上两个表,我们需要查询某个用户的所有文章,可以使用以下代码:

pythonCopy Code
user = User.objects.get(name='binjie09') articles = user.articles.all() for article in articles: print(article.title)

其中,User.objects.get(name='binjie09') 用来获取名为 binjie09 的用户对象,user.articles.all() 用来获取该用户所关联的所有文章对象。最后,我们遍历所有文章对象,并打印该文章的标题。

三、插入数据

插入数据时,我们需要先创建一个 User 对象和若干个 Article 对象:

pythonCopy Code
user = User.objects.create(name='binjie09', email='binjie09@example.com') article1 = Article(title='Django ORM', content='ORM 是什么?') article2 = Article(title='Django Admin', content='管理员页面是如何生成的?')

然后,将这些对象关联起来:

pythonCopy Code
article1.author = user article2.author = user article1.save() article2.save()

最后,通过 save() 方法将 Article 对象保存到数据库中。

四、更新数据

假设我们需要将某篇文章的标题和内容进行修改:

pythonCopy Code
article = Article.objects.get(title='Django ORM') article.title = 'Django ORM 入门教程' article.content = 'ORM 可以提高开发效率,让开发人员更专注于业务逻辑的实现。' article.save()

使用 get() 方法获取指定文章对象,然后修改文章标题和内容,最后通过 save() 方法将修改保存到数据库中。

五、删除数据

假设我们需要删除某个用户及其所有文章:

pythonCopy Code
user = User.objects.get(name='binjie09') user.delete()

使用 get() 方法获取名为 binjie09 的用户对象,然后调用 delete() 方法删除该用户及其所有文章。