获取在此对象之前创建的对象

时间:2016-11-04 14:46:20

标签: django django-models

我想要两个对象之间的增量:

class Point(models.Model):

    measurement = models.ForeignKey(Measurement)
    time = models.DateTimeField()
    value = models.FloatField()

    def delta(self):
        measurement = self.measurement.point_set.order_by('time')
        measurement = measurement[-2]
        return self.value - measurement.value

但这显然只适用于最新的对象。有没有办法在时间意义上获得self.object的前辈?

1 个答案:

答案 0 :(得分:1)

def delta(self):
    try:
        my_predecessor = self.objects\
            .filter(measurement_id=self.measurement_id, pk__lt=self.pk)\
            .order_by('pk')[-1]
    except IndexError:
        # there is no previous object
        return None
    else:
        return self.time - my_predecessor.time

self.measurement_id应与self.measurement.pk

同义

pk表示主键。这些值通常是从序列中自动分配的。

pk__lt=self.pk表示“pk L ess T han mine”或“早于我创建”的对象。更多here

order_by('pk'),所以我确保按照创建顺序选择Point个对象(比较整数字段总是比比较DateTimeField个对象。您总是可以用{{order_by('time')替换它。 1}}如果你有疑惑:)

_id被描述为here。我用它来构建一个更优的SQL查询,它只从一个表中选择(不加入Measurement模型的表)。 _id__id之间的difference

最后,[-1]获取最后一个对象。 Django queryset slicingpython slicing非常相似。