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

Django如何查询多对多字段中包含指定主键的所有Subscription对象

Django自关联多对多字段查询方案

核心查询写法

你模型里定义的多对多字段名为connected_subscriptions,直接基于该字段构造过滤条件即可,分两种常用场景:

  • 已拿到目标Subscription的实例对象:
# target_subscription 为你要匹配的关联对象实例
result = Subscription.objects.filter(connected_subscriptions=target_subscription)
  • 仅持有目标Subscription的主键值subscription_key:
# 用双下划线关联关联对象的主键字段即可
result = Subscription.objects.filter(connected_subscriptions__id=subscription_key)

注意事项

  • 你初步思路里的字段名拼写错误,误写为connected_subscription(少了末尾的s),查询时需要和模型中定义的字段名完全保持一致
  • 你当前的模型没有设置symmetrical=False,自关联多对多默认是对称关系,上述写法可以正常命中所有关联了目标对象的记录;如果你后续给字段加了symmetrical=False参数,需要根据你设置的related_name调整查询字段。

额外场景示例

如果你需要过滤结果时排除目标Subscription自身,可以叠加exclude条件:

result = Subscription.objects.filter(connected_subscriptions__id=subscription_key).exclude(id=subscription_key)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 23:06:06