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

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

本文详解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 相关产品和应用

全部下载

专题列表