104

特定のクエリセットの最後のレコードを取得するにはどうすればよいですか?

4

11 に答える 11

151

ジャンゴドキュメント

latest(field_name=None)日付フィールドとして指定された field_name を使用して、テーブル内の最新のオブジェクトを日付別に返します。

pub_dateこの例では、フィールドに従って、テーブル内の最新のエントリを返します 。

Entry.objects.latest('pub_date')
于 2010-08-23T07:42:19.397 に答える
93

編集:あなたは今使用する必要がありますEntry.objects.latest('pub_date')


を使用して、次のようなことを簡単に実行できますreverse()

queryset.reverse()[0]

また、Django ドキュメントからの次の警告にも注意してください。

...reverse()通常、順序付けが定義されている QuerySet でのみ呼び出す必要があることに注意してください (たとえば、デフォルトの順序付けを定義するモデルに対してクエリを実行する場合、または を使用する場合order_by())。与えられた に対してそのような順序付けが定義されていない場合、それをQuerySet呼び出しreverse()ても実際の効果はありません (順序付けは を呼び出す前に未定義reverse()であり、その後も未定義のままになります)。

于 2010-02-03T09:57:29.657 に答える
68

それを行う最も簡単な方法は次のとおりです。

books.objects.all().last()

これを使用して、次のように最初のエントリを取得することもできます。

books.objects.all().first()
于 2015-11-13T09:57:22.077 に答える
43

最初のオブジェクトを取得するには:

ModelName.objects.first()

最後のオブジェクトを取得するには:

ModelName.objects.last()

フィルターを使用できます

ModelName.objects.filter(name='simple').first()

これは私にとってはうまくいきます。

于 2015-11-25T12:24:19.620 に答える
8

クエリセットが既に使い果たされている場合、別の db ヒントを回避するためにこれを行うことができます -

last = queryset[len(queryset) - 1] if queryset else None

使用しないでくださいtry...except...
この場合、 Django はスローしませんIndexError。or
をスローします(-O オプションを指定して python を実行すると)AssertionErrorProgrammingError

于 2014-05-14T04:26:18.117 に答える
4

django 1.6以降を使用している場合、新しいAPIが導入されたため、はるかに簡単になりました-

Model.object.earliest()

逆方向の latest() が返されます。

ps - 私はその古い質問を知っています。誰かがこの質問に着地するかのように投稿します。彼らはこの新しい機能を知り、古い方法を使用することはありません。

于 2014-01-11T21:16:53.020 に答える
-7

現在の順序を気にする必要がない最も簡単な方法は、QuerySet をリストに変換して、Python の通常の負のインデックス付けを使用できるようにすることです。そのようです:

list(User.objects.all())[-1]
于 2013-02-07T15:14:48.480 に答える