0

有以下四种型号

测量:

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)

测量配置

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 尝试不使用循环,同样的问题发生了。

我知道问题出在查询中,但我无法找出问题所在。

4

1 回答 1

1

你的目标:

现在我想从特定直线加速器和能量的测量模型中获取所有剂量测量值。

我的做法:

  1. 获取直线加速器记录。
  2. 使用多对多链接表获取相应的能量记录。
  3. 获取链接到 Linac 记录的所有 MeasurementConfig 记录。
  4. 对于每条MeasurementConfig记录,获取所有Measurement记录;使用 Energy 记录过滤此记录集。

在您发布的代码中,您似乎正在尝试根据您指定的模型过滤不存在​​的链接上的测量记录集。

# Get the measurements
energymeasurements = []    
for energy in energies:
    measurements = Measurement.objects.filter(config__linac=linac).filter(config__linac__energies__exact=energy)
    energymeasurements.append(measurements)

测量与直线加速器无关,所以我认为这就是为什么你没有得到你期望的结果。

于 2013-04-19T13:49:01.233 回答