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
相关产品推荐
相关产品推荐

