如何在Django中获取仅关联了文章的ArticleCategory对象?
获取至少关联一篇Article的ArticleCategory对象
针对你的Django模型,有两种常用方法可以筛选出至少关联一篇文章的分类:
方法1:反向关联筛选 + 去重
利用Django的反向关联特性,结合filter和distinct()实现:
ArticleCategory.objects.filter(article__isnull=False).distinct()
- 原理:
article__isnull=False会筛选出存在关联Article的分类;distinct()用来去除因同一分类关联多篇文章而产生的重复结果。
方法2:子查询(性能更优)
使用Exists子查询直接验证分类是否有关联文章,适合数据量较大的场景:
from django.db.models import Exists, OuterRef ArticleCategory.objects.filter( Exists(Article.objects.filter(Category=OuterRef('pk'))) )
- 原理:子查询会检查当前分类是否存在对应的Article记录,只返回符合条件的分类,无需额外去重,查询效率更高。
注:因为你的
Article模型中多对多字段名为Category,所以ArticleCategory的反向关联默认是article_set,在查询中可以简写为小写的模型名article。
内容的提问来源于stack exchange,提问作者Random User
相关产品推荐
相关产品推荐

