Django外键操作详解:主表与子表的相互查询及related_name用法

何川
何川
发布时间:2026-10-13| 6人浏览过
原创

本文详解Django中ForeignKey的外键操作,涵盖通过主表查询子表(使用_set)及通过子表反向查询主表(使用外键字段名)的具体方法。重点解析related_name参数的作用,演示如何自定义反向查询属性以简化代码。通过Python Shell实例展示Teacher与Student模型的一对多关系处理,帮助开发者掌握Django ORM的核心查询技巧。

Django外键基础与模型定义

此前曾撰写过关于Django外键的文章,但当时未涉及基于外键的数据操作细节,即如何从主表查询子表数据,或从子表反向查询主表信息。

首先定义两个模型:老师模型与学生模型。一个老师对应多个学生,属于典型的一对多关系(如下图所示)。

  

若需查询某老师对应的所有学生,应如何操作?

通过主表查询子表:使用_set

首先获取老师信息,此处使用Python Shell进行演示。输入命令python manage.py shell进入Python Shell操作界面:

第一步需导入模型,并获取老师的相关数据。

返回一个teacher对象后,接下来查询与该teacher关联的学生对象。需注意,Django默认情况下,每个主表对象都包含一个用于查询子表信息的属性,该属性名为子表名小写后加上_set。具体到本例即为student_set,默认返回QuerySet对象,操作如下:

自定义反向查询:related_name的作用

此处涉及另一个知识点:related_name的使用。在models.py中使用ForeignKey定义外键时,可传入related_name参数,操作如下:

执行python manage.py makemigrations和python manage.py migrate命令。

从上图可见,使用related_name的效果与之前的_set操作一致,两者功能相同。若觉得使用_set较为繁琐,可在定义主表外键时直接通过related_name指定名称,从而简化调用。

上述查询方式主要通过主表获取子表信息。

通过子表反向查询主表

接下来介绍如何通过子表查询主表信息,即查询某学生所对应的老师信息。

首先需获取一个子表对象,随后可通过定义外键时的字段名来获取主表信息。

例如,已获取一个student对象,欲获取该学生对应的主表Teacher中的信息,可使用student.teacher进行查询。其中,teacher即为在子表中定义的外键字段名,如下所示:

以上为本文全部内容,希望对各位的学习有所帮助,也欢迎大家继续支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。