web-dev-qa-db-ja.com

クエリセットの最後のレコードを取得する

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

72
Stephen

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

_queryset.reverse()[0]
_

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

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

71
jujule

Django Doc

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

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

Entry.objects.latest('pub_date')
117
Asinox

Django> = 1.6

フィルターに一致する最初または最後のオブジェクトを返す便利なメソッドであるQuerySetメソッドfirst()およびlast()が追加されました。一致するオブジェクトがない場合はNoneを返します。

31
panchicore

最も簡単な方法は次のとおりです。

books.objects.all().last()

また、これを使用して次のような最初のエントリを取得します。

books.objects.all().first()
30
haky_nash

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

ModelName.objects.first()

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

ModelName.objects.last()

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

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

これは私のために動作します。

21
Ravi Kumar

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

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

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

6
jifeng.yin

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

Model.object.earliest()

それは、逆方向でlatest()を提供します。

追伸-私はその古い質問を知っています。誰かがこの質問に進むと、彼らはこの新しい機能を知るようになり、古い方法を使わないように投稿します。

3
Mutant