2017-01-24 11 views
2

私には数多くのプロジェクトがあるDjangoアプリケーションがあります。各プロジェクトには多数の予算があり、新しい予算がプロジェクトに追加されるたびに、そのプロジェクトの既存の予算にはversion_numberが1つ増分されます。Python-日付フィールドがオブジェクトのリストから最新の値を持つオブジェクトを取得するにはどうすればよいですか?

budgetInstance = Budget.objects.get(project = project, version_number = 0) 

しかし、それは何とかようです:「現在の予算は、そのversion_number 0-ある他の場所のコードで使用するための現在の予算「を取得する」にしようとするときに、私はのようなものをやっている予算でなければなりませんプロジェクトのいくつかはversion_numberが0であるbudgetsの数で終了しましたので、データベース内のいくつかのプロジェクトには現在の予算がいくつかあるようです...

私はバージョン管理がどのように行われているかのロジックを修正するために、に同じversion_numberを割り当てることはできませんが、今のところ私はちょうど最新のデータベース内のプロジェクトごとに

Budgetオブジェクトは、次のような属性があります。project_idversion_numberidpresentation_dateなど

だから私は今、私は彼らのpresentation_dateフィールドでversion_number = 0)によってフィルタリング時に返されたbudgetsをフィルタリングします。私が理解したように、私はmin()を使ってこれを行うだろうが、私はこの作業を取得するように見えることはできません...

私は、受け入れ答え、次の試してみました:Find oldest/youngest datetime object in a list、シェルで次のように走った:

mostRecentBudget = min(date for date in budgets.dates if date < now) 

しかし、私は言ったTypeError、得た:

TypeError: 'instancemethod' object is not iterable

なぜこれがあるの?最新のpresentation_dateフィールド値を持つものに対して、ProjectBudgetsのリストを検索するにはどうすればよいですか?

+0

詳細情報を提供する必要があります。 「予算」と「予算」は何ですか?なぜこのクエリを注文するためにdbを使用できないのですか? –

答えて

4

Date[Time]Fields__lt[e], __gt[e]date[time]というオブジェクトでフィルタリングできます。その後、latest(field_name)を使用します。QuerySetが空の場合とは異なりlast

from django.utils import timezone 

now = timezone.datetime.now() 
Budget.objects.filter(
    project=project, version_number=0, 
    presentation_date__lte=now # p_d less than or equal now 
).latest('presentation_date') 

が、非常に多くのgetのように、これはObjectDoesNotExistが発生します。

+0

お返事ありがとうございます。あなたが言及したように、私は 'DoesNotExist'エラーメッセージを受け取っていますが、私はなぜ...?クエリーセットはなぜ空になるのですか? testPrjBdgtsv0 = testPrjBdgts.filter(version_number = 0) 'を実行し、次に' testPrjBdgtsv0'を実行すると、 '[ 、...] '明らかにクエリーセットは空ではない...? – someone2088

+0

それから、例外は発生しません。まったく同じクエリーセットで最新のものを呼んでもよろしいですか?私の例のqsにはさらに2つのフィルタがあります。 – schwobaseggl

+0

私はそれをあなたの答えに書いたとおりに正確にタイプしていますが、入力すると少し異常なことが起こります: '__lte = 'とタイプすると、カーソルが行の先頭に戻ります。私は '今すぐ 'と入力し続けます)、それはすべて行の先頭に書かれたものを上書きします... – someone2088

関連する問題