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

如何在Django中查询关联Form实例的所有Person对象?

获取关联了Form实例的Person对象查询方法

针对你的模型结构,有两种常用方法可以获取所有关联了Form实例的Person对象:

方法一:利用反向关联过滤(简洁直观)

通过反向关联字段的isnull条件筛选,配合distinct()避免重复结果(如果一个Person对应多个Form时会出现重复):

Person.objects.filter(form__isnull=False).distinct()

这里form是Form模型的小写名称,Django会自动处理反向关联的查询,form__isnull=False表示该Person至少关联了一个Form实例。

方法二:使用Exists子查询(性能更优)

当数据量较大时,使用Exists子查询可以更高效地检查存在性,无需额外去重:

from django.db.models import Exists, OuterRef

Person.objects.filter(
    Exists(Form.objects.filter(filled_by=OuterRef('pk')))
)

OuterRef('pk')引用外层查询中Person的主键,Exists判断是否存在对应的Form记录,这种方式数据库只会执行一次存在性检查,性能更出色。

上述两种方法都会返回你期望的PersonA(Will)和PersonC(Dan)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 09:52:04