我的django项目正面临着麻烦。我有一个三层模型:
model.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中)。
发布于 2021-01-26 21:34:13
你查过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` https://stackoverflow.com/questions/65908913
复制相似问题