具体的には、このようなフィールドを持つモデルがあります
pub_date = models.DateField("date published")
最新のオブジェクトを簡単に取得できるようにしたいpub_date
。これを行う最も簡単な/最良の方法は何ですか?
次のようなものは私が望むことをしますか?
Edition.objects.order_by('pub_date')[:-1]
具体的には、このようなフィールドを持つモデルがあります
pub_date = models.DateField("date published")
最新のオブジェクトを簡単に取得できるようにしたいpub_date
。これを行う最も簡単な/最良の方法は何ですか?
次のようなものは私が望むことをしますか?
Edition.objects.order_by('pub_date')[:-1]
obj = Edition.objects.latest('pub_date')
モデルのメタを入れることで物事を単純化することもget_latest_by
できます。
obj = Edition.objects.latest()
詳細については、ドキュメントを参照してください。おそらく、ordering
Meta オプションも設定する必要があります。
ハーレーの答えは、特定のモデルのいくつかの順序付け基準に従って最新のものが必要な場合に進む方法ですが、一般的な解決策は、順序を逆にして最初のアイテムを取得することです。
Edition.objects.order_by('-pub_date')[0]
ノート:
通常のPythonリストは負のインデックスを受け入れます。これは、正の数のように最初からではなく、リストの最後からのオフセットを意味します。ただし、QuerySetオブジェクトは発生します
AssertionError:負のインデックス付けはサポートされていません。負のインデックスを使用する場合は、insinが言ったことを実行する必要があります。順序を逆にして、
0th
要素を取得します。
使用上の注意
Edition.objects.order_by('-pub_date')[0]
空の QuerySet にインデックスを付けている可能性があるためです。正しい Pythonic アプローチが何であるかはわかりませんが、最も簡単なのは、if/else または try/catch でラップすることです。
try:
last = Edition.objects.order_by('-pub_date')[0]
except IndexError:
# Didn't find anything...
しかし、@Harleyが言ったように、日付で注文するときlatest()
は、ジャンゴニックな方法です。