Django关联嵌套related_name问题:如何单循环遍历分类下所有商品规格?
解决Django中遍历分类下所有商品规格的单循环问题
错误原因
category.products 返回的是Product对象的RelatedManager(即该分类下所有商品的集合),并非单个Product实例,因此无法直接访问sizes属性,这就是触发AttributeError的原因。
单循环实现方案
直接通过Size模型的跨关系查询,一次性获取指定分类下所有商品的规格,实现单循环遍历:
def adjust_sizes(self, category: Category) -> None: # 跨关联查询:筛选属于目标分类下所有商品的规格 sizes = Size.objects.filter(product__category=category) for size in sizes: # 执行你的业务逻辑 pass
优化查询效率(可选)
如果需要在循环中访问size.product的属性,为避免N+1查询问题,可以添加select_related预关联查询:
sizes = Size.objects.filter(product__category=category).select_related('product')
这样在遍历过程中访问size.product不会额外触发数据库查询,提升性能。
内容的提问来源于stack exchange,提问作者Djozeph
相关产品推荐
相关产品推荐

