Django技术问询:如何获取关联指定Formula的所有FeedstockFormulas?
获取某个Formula实例的所有FeedstockFormulas数据
嘿,针对你的问题,我来给你梳理下怎么快速获取某个Formula实例对应的所有FeedstockFormulas数据,基于你提供的Django模型结构,有两种常用方法:
方法1:使用Django自动生成的反向关联管理器
Django会为ForeignKey字段自动创建反向关联的查询管理器,默认命名规则是模型名小写 + _set。
假设你已经拿到了一个Formula实例,比如通过ID获取:
# 先获取目标Formula实例 target_formula = Formulas.objects.get(id=1) # 这里替换成你的查询条件 # 获取该实例对应的所有FeedstockFormulas数据 related_feedstock_formulas = target_formula.feedstockformulas_set.all()
这里的feedstockformulas_set就是Django为你自动生成的反向关联属性,直接调用.all()就能拿到所有关联的FeedstockFormulas对象。
方法2:自定义反向关联名称(更直观)
如果你觉得默认的名称不够好记,可以修改FeedstockFormulas模型里的ForeignKey字段,添加related_name参数来指定自定义名称:
# 修改FeedstockFormulas模型中的formulas字段 class FeedstockFormulas(models.Model): ratio = models.FloatField() feedstock = models.OneToOneField("dashboard.Feedstock", on_delete=models.CASCADE, default="0") # 添加related_name参数 formulas = models.ForeignKey("dashboard.Formulas", on_delete=models.CASCADE, related_name="feedstock_formulas")
修改完成后,你就可以用更清晰的名称来查询:
target_formula = Formulas.objects.get(id=1) related_feedstock_formulas = target_formula.feedstock_formulas.all()
额外小技巧
- 如果你需要对关联数据做筛选,可以直接在后面链式调用
filter()方法,比如筛选ratio大于0.5的记录:filtered_formulas = target_formula.feedstock_formulas.filter(ratio__gt=0.5) - 为了避免N+1查询问题(多次数据库请求),可以在查询Formula的时候提前预取关联数据:
# 提前预取所有关联的FeedstockFormulas target_formula = Formulas.objects.prefetch_related('feedstock_formulas').get(id=1) # 后续访问target_formula.feedstock_formulas不会再触发额外的数据库查询
内容的提问来源于stack exchange,提问作者Isaac Reinaldo
相关产品推荐
相关产品推荐

