Django如何获取与指定模型关联的所有ManyToMany字段对应对象
错误原因
News.categories是模型类的多对多字段描述符,仅可作用于模型实例,直接通过类调用时不属于查询管理器,因此无法执行all()等查询方法,触发AttributeError。
解决方案
1. 查询所有关联过News模型的分类
通过Category模型的反向关联related_name查询即可:
# 去重获取所有至少绑定了1条News的分类 Category.objects.filter(news__isnull=False).distinct()
2. 查询仅绑定News、未绑定Reviews的分类
如果要筛选「只和其中一个模型关联、完全不和另一个模型绑定」的分类,增加排除条件即可:
Category.objects.filter(news__isnull=False).exclude(reviews__isnull=False).distinct()
补充:查询单条News记录关联的分类
如果是要获取某个具体News实例关联的分类,需要先拿到实例再调用多对多字段:
# 先获取指定News实例 target_news = News.objects.get(id=xxx) # 再查询关联分类 target_news.categories.all()
内容的提问来源于stack exchange,提问作者Farzad
相关产品推荐
相关产品推荐

