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

