2016-11-04 4 views
0

は、私は2つのオブジェクト間のデルタを希望する前に作成されたオブジェクトを取得します。 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_idself.measurement.pk

pkに主キーを意味同義である必要があります。値は通常、シーケンスから自動的に割り当てられます。 "そのPK L ESS T漢鉱山であるオブジェクト"、または "以前の私よりも作成した"

pk__lt=self.pk手段。 More here

私はorder_by('pk')ので、私は(整数フィールドを比較すると、より高速なDateTimeFieldオブジェクトを比較するよりも常にそれらが作成された順にPointオブジェクトを選択することを確認してください。あなたには、いくつかの疑問を持っている場合は、常にorder_by('time')に置き換えることができます:)

_idhereと記載されている。私はこれを使って、1つのテーブルから選択するだけのより最適なSQLクエリを作成しました(Measurementモデルのテーブルに参加しません)。 difference_id__idの間です。

最後に、[-1]が最後のオブジェクトを取ります。 Django queryset slicingpython slicingとよく似ています。

関連する問題