Django ORM - 多表实例学习笔记
一、关联表的创建
在 Django 中,我们可以创建多个表,这些表之间的关系可以通过 ForeignKey 和 ManyToManyField 来建立。
以一个博客系统为例,假设我们需要创建两个表,一个是用户表,另一个是文章表。每个用户会对应多篇文章,这两个表之间是一对多的关系。
1. 用户表
pythonCopy Codefrom django.db import models
class User(models.Model):
name = models.CharField(max_length=50)
email = models.EmailField()
2. 文章表
pythonCopy Codefrom 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 Codeuser = 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 Codeuser = User.objects.create(name='binjie09', email='binjie09@example.com')
article1 = Article(title='Django ORM', content='ORM 是什么?')
article2 = Article(title='Django Admin', content='管理员页面是如何生成的?')
然后,将这些对象关联起来:
pythonCopy Codearticle1.author = user article2.author = user article1.save() article2.save()
最后,通过 save() 方法将 Article 对象保存到数据库中。
四、更新数据
假设我们需要将某篇文章的标题和内容进行修改:
pythonCopy Codearticle = Article.objects.get(title='Django ORM')
article.title = 'Django ORM 入门教程'
article.content = 'ORM 可以提高开发效率,让开发人员更专注于业务逻辑的实现。'
article.save()
使用 get() 方法获取指定文章对象,然后修改文章标题和内容,最后通过 save() 方法将修改保存到数据库中。
五、删除数据
假设我们需要删除某个用户及其所有文章:
pythonCopy Codeuser = User.objects.get(name='binjie09')
user.delete()
使用 get() 方法获取名为 binjie09 的用户对象,然后调用 delete() 方法删除该用户及其所有文章。