在 Django 中,ForeignKey
是一个数据库模型字段,用于创建多对一(many-to-one)的关系。它实质上是数据库表之间的一个链接,指向另一个模型的实例。在 Django 的 ORM(对象关系映射)系统中,ForeignKey
字段非常重要,因为它允许模型间的数据关联和交互。
基本用法
在 Django 模型中定义 ForeignKey
时,你需要指定它关联到哪个模型。例如,如果你有一个 Author
模型和一个 Book
模型,每本书都有一个作者,你可以在 Book
模型中使用 ForeignKey
来引用 Author
模型:
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
参数
- 第一个参数:
- 指定关联的模型。在上面的例子中,
Book
模型中的author
字段关联到Author
模型。
on_delete
:
- 这是必需的参数,用于定义当被引用的对象(如作者)被删除时,应如何处理与之关联的对象(如书籍)。
- 常见的选项包括:
models.CASCADE
:当被引用的对象被删除时,同时删除所有引用它的对象。models.PROTECT
:阻止删除被引用的对象。models.SET_NULL
:将引用设置为 NULL(需要字段被设置为 nullable)。models.SET_DEFAULT
:设置为默认值。models.SET(...)
:设置为特定值或者调用函数。
关系访问
通过 ForeignKey
字段,你可以轻松访问关联的数据。例如,如果你有一个 Book
实例,你可以通过 book.author
来访问与之关联的 Author
实例。反过来,如果你有一个 Author
实例,你可以通过 author.book_set
来访问所有与该作者关联的 Book
实例(Django 自动为 ForeignKey
字段创建反向关系,使用模型名小写加 _set
)。
进阶用法
ForeignKey
字段还支持许多其他选项和参数,如 related_name
(用于定义反向关系的名称),limit_choices_to
(限制可选择的对象),db_index
(在数据库中为该字段创建索引)等,允许你根据应用需求灵活地构建复杂的数据库关系。