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

如何通过Django父模型调用子模型的多对一反向关联查询集?

通过父模型调用子模型查询集的方法

首先先修正你模型代码里的一个小错误:related_name 参数需要传入字符串,你当前写的 related_name=child_class 会触发变量未定义的错误,正确写法应该是:

class Parent(models.Model):
    name = models.CharField(max_length=100)  # Django中CharField必须指定max_length参数

class ChildClass(models.Model):
    name = models.CharField(max_length=100)
    parent = models.ForeignKey(Parent, on_delete=models.CASCADE, related_name='child_class')

核心用法:通过父模型实例获取子模型查询集

因为你已经在外键字段设置了 related_name='child_class',直接通过父模型实例调用这个名称就能拿到关联的子模型查询集:

# 先获取一个父模型实例
parent = Parent.objects.get(id=1)

# 获取该父模型关联的所有子模型实例
child_queryset = parent.child_class.all()

# 遍历子实例
for child in child_queryset:
    print(child.name)

进阶操作:过滤、排序子查询集

这个反向关联的查询集和普通 QuerySet 用法完全一致,可以直接添加过滤、排序等操作:

# 过滤出名称包含"test"的子模型实例(不区分大小写)
filtered_children = parent.child_class.filter(name__icontains='test')

# 按名称倒序排列子实例
sorted_children = parent.child_class.order_by('-name')

补充:未设置related_name的默认情况

如果当初没指定 related_name,Django会自动生成默认反向关联名,格式为「子模型类名小写 + _set」,也就是:

# 默认反向关联名调用
child_queryset = parent.childclass_set.all()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 19:22:31