如何通过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
相关产品推荐
相关产品推荐

