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

Django通过外键关系使用filter__in查询返回空QuerySet如何解决

问题原因

你的Django ORM查询字段层级书写错误,导致查询条件不匹配,所以返回空集合:
Poller模型的poller_category字段本身就是直接关联Category表的外键,你在构造筛选条件时额外加了__category后缀,相当于去匹配Category模型里存储分类名称的category(CharField类型)字段,和你传入的Category对象查询集类型完全不匹配,自然无法查到符合条件的记录。

修复方案

将视图层中qs_poller的筛选条件修改为如下代码即可:

# 修正后的查询语句,去掉多余的__category层级
qs_poller = Poller.objects.filter(poller_category__in=category_filter).order_by('-created_on')[:100]
可选优化

如果想要进一步提升查询性能,也可以提前取到选中分类的ID列表再传入筛选条件,避免多表关联子查询的开销:

category_ids = Category.objects.filter(usercategoryfilter__user=request.user).values_list('pk', flat=True)
qs_poller = Poller.objects.filter(poller_category_id__in=category_ids).order_by('-created_on')[:100]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:15:04