python-3.x - Django 从 FK 的 FK 获取内容
问题描述
我的 django 项目遇到了麻烦。我有一个三层模型:
模型.py
class PLC(models.Model):
name = models.CharField(max_length=50)
class Measure(models.Model):
class Meta:
unique_together = ('PLC', 'address', 'is_bit')
PLC = models.ForeignKey(PLC, on_delete=models.CASCADE)
address = models.IntegerField()
is_bit = models.BooleanField()
class MeasureValue(models.Model):
measure = models.ForeignKey(Measure, on_delete=models.CASCADE)
value = models.TextField()
在我的view.py中,我希望能够从 plc 中获取度量值
class PLCViewSet(viewsets.ModelViewSet):
queryset = PLC.objects.all()
serializer_class = PLCSerializer
def measures(request, id):
plc = PLC.objects.get(id=id)
measures = Measure.objects.filter(PLC=id)
values = MeasureValue.objects.filter(measure__PLC=id)
context = {
'PLC': plc,
'MEASURES': measures,
'VALUES': values
}
return render(request, 'measures.html', context)
不幸的是,我无法做出正确的filter()
决定(数据存储在 sqlite 库中)。
解决方案
你有没有研究过prefetch_related
和Prefetch
?PLC
这些将允许您在获取实例时提取相关字段。然后您可以按如下方式访问它们:
plc = PLC.objects.prefetch_related('measure_set__measurevalue_set').filter(id=id).first()
plc.measure_set.all() # QuerySet of `Measure` that are filtered to the `plc`
for measure in plc.measure_set.all():
measure.measurevalue_set.all() # QuerySet of `MeasureValue` that are filtered to the `measure` therefore `plc`
推荐阅读
- arrays - 从 ForEach 循环创建数组
- arrays - 检索和更新函数,用于在第三个数组中求和两个数组
- python - opencv没有捕获所有帧
- python-3.x - 在给定均值和标准差的情况下寻找样本集
- python - 如何从标签中恢复 http 链接
- javascript - 如何在 JavaScript 中更改按钮的 onclick 功能?
- java - Android Studio:尝试在空对象引用上调用虚拟方法“void android.widget.ImageButton.setImageResource(int)”
- java - 从字符列表转换“列表
" 到一个字符数组 "char[]" - git - 将文件复制到 .deploy 后,Hexo 命令 hexo d 停止
- python - Pandas 优化性能 loc 函数