在 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(在数据库中为该字段创建索引)等,允许你根据应用需求灵活地构建复杂的数据库关系。










