含双ForeignKey的Model查询:获取特定用户关联的唯一Segment
获取指定用户关联的唯一Segment查询集
你可以直接从Segment模型出发,通过反向关联跨表过滤并去重,一步得到目标查询集,这比先获取ID列表再查询更高效:
user_id = 10 unique_segments = Segment.objects.filter( segmenteffort__activity__user=user_id ).distinct()
说明:
segmenteffort是Django自动生成的反向关联名称(对应SegmentEffort模型中指向Segment的外键),通过它可以跨表关联到SegmentEffort记录- 继续用双下划线
__activity__user深入过滤到归属指定用户的Activity distinct()用于确保每个Segment只返回一次,避免同一个Segment因关联多条符合条件的SegmentEffort而重复出现
如果你坚持用已有的ID列表方式,也可以通过in查询获取Segment查询集:
sids = SegmentEffort.objects.filter(activity__user=10).values_list('segment_id', flat=True).distinct() unique_segments = Segment.objects.filter(id__in=sids)
但第一种方法只需要一次数据库查询,性能更优。
内容的提问来源于stack exchange,提问作者lgalarno
相关产品推荐
相关产品推荐

