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

如何用Django ORM直接查询指定workspace关联的Template对象QuerySet

解决方法

可以直接通过Django ORM的跨关联查询实现,无需额外的列表推导逻辑,写法如下:

template_qs = Template.objects.filter(document__shareddocument__workspace='1')

上述代码返回的直接是符合条件的Template对象的QuerySet,你可以直接对它做迭代、进一步过滤等操作。

原理说明

Django ORM支持用双下划线__跨外键关联进行查询,你场景下的关联路径为:Template -> 外键document关联到Document模型 -> Document反向关联到SharedDocument模型,所以通过document__shareddocument__workspace就能直接过滤出SharedDocument中workspace为指定值对应的所有Template。

补充优化点

  • 如果存在同一个Document对应多条同workspace的SharedDocument记录的情况,查询结果会出现重复的Template,可以加distinct()去重:
    template_qs = Template.objects.filter(document__shareddocument__workspace='1').distinct()
    
  • 你之前的写法里用了template_set.get(),说明你的业务里每个Document最多关联一个Template,如果后续逻辑变更为一个Document可关联多个Template,这种直接过滤的写法也能正常返回所有符合条件的结果,不会像get()一样抛出MultipleObjectsReturned异常。
  • 这种写法的查询效率比你原先的写法更高,只需要执行一次JOIN查询就能拿到结果,避免了额外的Python层迭代处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:39:05