定义多对一关系:
考虑一个例子,假设有两个模型:Author(作者)和Book(书籍)。一本书只能有一个作者,但一个作者可以写多本书。
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
在Book模型中,通过 ForeignKey 定义了一个多对一关系,将 Book 与 Author 关联。这意味着一本书(Book)只能有一个作者(Author),而一个作者(Author)可以有多本书(Book)。
添加关联数据:
使用多对一关系时,可以轻松地添加和查询关联数据。例如,为某本书添加作者:
# 获取某本书
book = Book.objects.get(pk=1)
# 创建一个新作者
new_author = Author.objects.create(name='New Author')
# 将书关联到新作者
book.author = new_author
book.save()
查询多对一关系:
可以通过多对一关系进行灵活的查询。例如,查找某个作者写的所有书:
# 获取某个作者
author = Author.objects.get(pk=1)
# 查找该作者写的所有书
books = author.book_set.all()
在这个例子中,book_set 是由Django自动生成的反向关系的名称。你也可以使用 related_name 参数来自定义反向关系的名称。
使用 on_delete 参数:
在定义多对一关系时,需要使用 on_delete 参数指定在关联对象被删除时的行为。常见的选项包括:
- models.CASCADE: 级联删除,删除关联对象时同时删除所有关联的对象。
- models.PROTECT: 保护,防止删除关联对象。
- models.SET_NULL: 将关联字段设为NULL。
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(Author, on_delete=models.SET_NULL, null=True)
以上是Django 4.0中多对一关联的基本用法,这种关系常用于表示属于某一类别或拥有某一属性的情况。
转载请注明出处:http://www.pingtaimeng.com/article/detail/7196/Django