21

具体的には、このようなフィールドを持つモデルがあります

pub_date = models.DateField("date published")

最新のオブジェクトを簡単に取得できるようにしたいpub_date。これを行う最も簡単な/最良の方法は何ですか?

次のようなものは私が望むことをしますか?

Edition.objects.order_by('pub_date')[:-1]
4

5 に答える 5

33
obj = Edition.objects.latest('pub_date')

モデルのメタを入れることで物事を単純化することもget_latest_byできます。

obj = Edition.objects.latest()

詳細については、ドキュメントを参照してください。おそらく、orderingMeta オプションも設定する必要があります。

于 2008-10-31T00:34:02.047 に答える
22

ハーレーの答えは、特定のモデルのいくつかの順序付け基準に従って最新のものが必要な場合に進む方法ですが、一般的な解決策は、順序を逆にして最初のアイテムを取得することです。

Edition.objects.order_by('-pub_date')[0]
于 2008-10-31T01:59:17.337 に答える
4

ノート:

通常のPythonリストは負のインデックスを受け入れます。これは、正の数のように最初からではなく、リストの最後からのオフセットを意味します。ただし、QuerySetオブジェクトは発生します

AssertionError:負のインデックス付けはサポートされていません。
負のインデックスを使用する場合は、insinが言ったことを実行する必要があります。順序を逆にして、0th要素を取得します。

于 2008-10-31T03:01:01.783 に答える
2

使用上の注意

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()は、ジャンゴニックな方法です。

于 2008-11-02T19:26:59.963 に答える