特定のクエリセットの最後のレコードを取得するにはどうすればよいですか?
11 に答える
latest(field_name=None)
日付フィールドとして指定された field_name を使用して、テーブル内の最新のオブジェクトを日付別に返します。
pub_date
この例では、フィールドに従って、テーブル内の最新のエントリを返します 。Entry.objects.latest('pub_date')
編集:あなたは今使用する必要がありますEntry.objects.latest('pub_date')
を使用して、次のようなことを簡単に実行できますreverse()
。
queryset.reverse()[0]
また、Django ドキュメントからの次の警告にも注意してください。
...
reverse()
通常、順序付けが定義されている QuerySet でのみ呼び出す必要があることに注意してください (たとえば、デフォルトの順序付けを定義するモデルに対してクエリを実行する場合、または を使用する場合order_by()
)。与えられた に対してそのような順序付けが定義されていない場合、それをQuerySet
呼び出しreverse()
ても実際の効果はありません (順序付けは を呼び出す前に未定義reverse()
であり、その後も未定義のままになります)。
それを行う最も簡単な方法は次のとおりです。
books.objects.all().last()
これを使用して、次のように最初のエントリを取得することもできます。
books.objects.all().first()
最初のオブジェクトを取得するには:
ModelName.objects.first()
最後のオブジェクトを取得するには:
ModelName.objects.last()
フィルターを使用できます
ModelName.objects.filter(name='simple').first()
これは私にとってはうまくいきます。
クエリセットが既に使い果たされている場合、別の db ヒントを回避するためにこれを行うことができます -
last = queryset[len(queryset) - 1] if queryset else None
使用しないでくださいtry...except...
。
この場合、 Django はスローしませんIndexError
。or
をスローします(-O オプションを指定して python を実行すると)AssertionError
ProgrammingError
django 1.6以降を使用している場合、新しいAPIが導入されたため、はるかに簡単になりました-
Model.object.earliest()
逆方向の latest() が返されます。
ps - 私はその古い質問を知っています。誰かがこの質問に着地するかのように投稿します。彼らはこの新しい機能を知り、古い方法を使用することはありません。
現在の順序を気にする必要がない最も簡単な方法は、QuerySet をリストに変換して、Python の通常の負のインデックス付けを使用できるようにすることです。そのようです:
list(User.objects.all())[-1]