在Django 4.0中,多对一关联表示一个模型的多个实例可以关联到另一个模型的单个实例。这种关系也称为“多对一”或“多对一映射”。以下是关于多对一关联的基本概念和用法:

定义多对一关系:

考虑一个例子,假设有两个模型: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