定义模型
假设我们有两个模型:Author 和 Book。一个作者可以写多本书,而一本书只能由一个作者编写。在你的应用程序的 models.py 文件中定义这两个模型:
# models.py
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=255)
email = models.EmailField()
def __str__(self):
return self.name
class Book(models.Model):
title = models.CharField(max_length=255)
published_date = models.DateField()
author = models.ForeignKey(Author, on_delete=models.CASCADE)
def __str__(self):
return self.title
在这个例子中,Author 模型和 Book 模型之间存在一对多的关系,使用了 ForeignKey 字段。Author 模型有一个字段 books,它用于关联到 Book 模型。
创建迁移
创建数据库迁移,将模型映射到数据库表。在命令行中运行:
python manage.py makemigrations
应用迁移
将迁移应用到数据库中:
python manage.py migrate
使用 Django shell 进行查询
通过 Django shell,你可以执行一些查询操作,例如查找某个作者的所有书籍或查找某本书的作者。
python manage.py shell
在 shell 中,你可以执行以下操作:
创建新记录
from your_app.models import Author, Book
from django.utils import timezone
# 创建一个新的作者实例
new_author = Author(name='John Doe', email='john@example.com')
new_author.save()
# 创建一本新书并关联到作者
new_book = Book(title='Sample Book', published_date=timezone.now(), author=new_author)
new_book.save()
查询记录
# 获取所有作者
all_authors = Author.objects.all()
# 获取某个作者的所有书籍
author_books = Author.objects.get(name='John Doe').book_set.all()
# 获取所有书籍
all_books = Book.objects.all()
# 获取某本书的作者
book_author = Book.objects.get(title='Sample Book').author
这里使用了 book_set,它是由 Django 自动生成的用于访问与 Author 模型关联的所有 Book 实例的属性。你也可以在 Book 模型中使用 related_name 选项指定自定义的属性名。
通过这些操作,你可以使用 Django ORM 处理多表实例,执行涉及到关联的查询和操作。深入了解 Django ORM 还可以学习更多高级的特性,如多对多关系、反向查询等。
转载请注明出处:http://www.pingtaimeng.com/article/detail/13918/Django