2016-11-04 69 views
0

之前創建的對象我想兩個物體之間的增量:獲得在該對象

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
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是大號 ESS 牛逼邯礦」或「早於我創造」。更多here

order_by('pk'),所以我確保創建它們的順序選擇Point對象(比較整型字段總是比比較DateTimeField對象更快。您可以隨時與order_by('time')取代它,如果你將有一些疑慮:)

_id被描述爲here。我用它來構建一個更優化的SQL查詢,只從一個表中選擇(不加入Measurement模型的表)。 _id__id之間的difference

最後,[-1]取最後一個對象。 Django queryset slicing的作用非常類似於python slicing