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

Django中如何无后置处理直接查询多对多关联另一端的User模型列表

解决方案

直接利用Django ORM的反向关联跨表查询即可,生成的SQL是简洁的内连接语句,无需后置处理也没有多余的子查询/左连接:

from django.contrib.auth.models import User

# x为已知的users.id值
user_list = User.objects.filter(other_user_entries__your_user_id=x).distinct()

逻辑说明

  • other_user_entries是你在Entry_B.other_user字段上定义的反向关联名,通过它可以在User的查询中直接关联到Entry_B表
  • 筛选条件other_user_entries__your_user_id=x等价于原生SQL中Entry_B.your_user = x的过滤逻辑
  • 追加distinct()是为了避免同一个User被多条Entry_B记录关联时返回重复结果,若业务逻辑中不会出现重复关联可省略
  • 该查询生成的原生SQL等价于你期望的逻辑:
    SELECT DISTINCT auth_user.* FROM auth_user
    INNER JOIN entry_b ON auth_user.id = entry_b.other_user_id
    WHERE entry_b.your_user_id = <x>
    

如果需要额外针对Entry_B的字段加筛选条件,比如过滤未过期的关联记录,直接在filter中追加条件即可:

from django.utils import timezone

user_list = User.objects.filter(
    other_user_entries__your_user_id=x,
    other_user_entries__expiration_date__gt=timezone.now()
).distinct()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:36:04