如何在Django中获取指定Procedure集合关联的ProcedureCategories?
获取关联的ProcedureCategories方法
这里提供两种实用的实现方式,按需选择:
方法一:直接反向查询(推荐,高效)
从ProcedureCategories模型出发,利用反向关联过滤关联的Procedure满足你的条件,一次查询完成:
categories = ProcedureCategories.objects.filter( procedure__type=2, procedure__groups__user=request.user ).distinct()
- 这里的
procedure__是Django自动生成的反向关联(外键在Procedure模型,反向关联名为模型小写) distinct()用来避免同一个分类被多次返回(多个Procedure可能属于同一分类)
方法二:基于已有的procedureModels集合获取
如果已经拿到了procedureModels,可以通过它提取关联分类:
方式1:先取分类ID再查询
# 提取非空的分类ID并去重 category_ids = procedureModels.exclude(category__isnull=True).values_list('category_id', flat=True).distinct() categories = ProcedureCategories.objects.filter(id__in=category_ids)
方式2:直接通过关联对象获取
categories = procedureModels.exclude(category__isnull=True).values_list('category', flat=True).distinct()
关键提示
- 因为你的
Procedure模型中category字段允许为null,记得用exclude(category__isnull=True)排除空分类的情况,避免无效数据。 - 方法一的查询效率更高,属于单SQL查询;方法二更适合已经持有
procedureModels对象的场景。
内容的提问来源于stack exchange,提问作者progNewbie
相关产品推荐
相关产品推荐

