有以下四种模式
测量
class Measurement(models.Model):
config = models.ForeignKey(MeasurementConfig)
energy = models.ForeignKey(Energy)
dose = models.DecimalField(max_digits=20,decimal_places=9, blank=True, null=True)
MeasurementConfig
class MeasurementConfig(models.Model):
date = models.DateTimeField(auto_now_add=True)
linac = models.ForeignKey(Linac)
直线加速器
class Linac(models.Model):
name = models.CharField(max_length=10)
genre = models.ForeignKey(Type)
energies = models.ManyToManyField(Energy)
能源
class Energy(models.Model):
value = models.PositiveIntegerField()
category = models.ForeignKey(EnergyCategory)
现在我想从测量模型中获得特定直线加速器和能量的所有剂量测量结果。
我使用以下代码来获取这些代码:
linac = get_object_or_404(Linac, name=linacname)
# Get all the energies for the specified linac
measurementconfigs = MeasurementConfig.objects.filter(linac=linac)
identifications = []
for measurementconfig in measurementconfigs:
identifications.append(measurementconfig.identification)
config = get_object_or_404(MeasurementConfig, identification=identifications[0])
energies = config.linac.energies.all()
# Get the measurements
energymeasurements = []
for energy in energies:
measurements = Measurement.objects.filter(config__linac=linac).filter(config__linac__energies__exact=energy)
energymeasurements.append(measurements)
我希望能量测量看起来像这样:
energymeasurements = [(Measurements_**Energy1**), (Measurements_**Energy2**), (Measurements_**EnergyN**)]
其中N是能量的数量
但我得到的是:
energymeasurements = [(Measurements_**ALLEnergies1**), (Measurements_**ALLEnergies2**), (Measurements_**ALLEnergiesN**)]
其中N是能量的数量。
所以我希望我的查询得到循环指定的特定能量的所有测量值。但相反,我得到了所有能量的测量值。 我已经通过仅使用特定能量的id来尝试没有循环,同样的问题也出现了。
我知道问题出现在查询中,但我找不到它是什么。
答案 0 :(得分:1)
您的目标:
现在我想从测量模型中获得特定直线加速器和能量的所有剂量测量结果。
我的方法:
在您发布的代码中,根据您指定的模型,您似乎正在尝试过滤不存在的链接上的度量记录集。
# Get the measurements
energymeasurements = []
for energy in energies:
measurements = Measurement.objects.filter(config__linac=linac).filter(config__linac__energies__exact=energy)
energymeasurements.append(measurements)
测量与Linac无关,所以我认为这就是为什么你没有得到你期望的结果。