You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django模型中如何获取父对象、子对象及无父级对象?

Django自关联模型的层级对象查询方法

针对你给出的自关联模型,以下是三种场景的具体查询方法:

1. 获取某对象的父对象

直接通过实例的parent字段访问即可:

# 假设已获取test4对象
parent_obj = test4.parent
# parent_obj即为test2

2. 获取某对象的子对象

Django会为ForeignKey自动生成反向关联管理器,默认名称是模型名小写_set(比如你的模型名为Model,则管理器是model_set):

# 假设已获取test2对象
children_objs = test2.model_set.all()
# children_objs是包含test4的QuerySet

如果觉得默认名称不够直观,可以在定义ForeignKey时指定related_name优化可读性:

class Model(models.Model):
    name = models.CharField(max_length=30)
    parent = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True, related_name='children')

之后就能用更清晰的方式查询子对象:

children_objs = test2.children.all()

3. 获取无父级的对象

通过filter筛选parent字段为null的对象:

root_objs = Model.objects.filter(parent__isnull=True)
# root_objs是包含test的QuerySet

内容的提问来源于stack exchange,提问作者Drakan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 07:37:04