如何将获取含已发布条目分类的两个Django查询合并为一个?
合并查询获取包含已发布条目的分类
当然可以!你完全能把这两个查询合并成一个更简洁高效的单查询,而且Django ORM对这种跨关联模型的查询支持得很好。
直接通过Category的查询集,利用双下划线__关联到Entry的字段进行过滤就行,再加上distinct()避免重复结果,代码如下:
categories = Category.objects.filter(entries__is_published=True).distinct()
为什么这么写可行?
- Django ORM的双下划线语法允许你跨关联模型查询字段,这里
entries__is_published=True表示筛选出至少有一个已发布条目的分类。 - 加上
.distinct()是因为如果一个分类下有多个已发布条目,默认查询会返回该分类多次,distinct()会帮你去重,确保每个分类只出现一次。
这个写法只会生成一次数据库请求,相比原来的两次查询,性能更优,代码也更简洁。
内容的提问来源于stack exchange,提问作者Vlad T.
相关产品推荐
相关产品推荐

