特定のクエリセットの最後のレコードを取得するにはどうすればよいですか?
reverse()
を使用して、このようなことを簡単に行うことができます。
_queryset.reverse()[0]
_
また、Djangoドキュメントからのこの警告に注意してください:
...
reverse()
は通常、定義された順序を持つQuerySetでのみ呼び出されることに注意してください(たとえば、デフォルトの順序を定義するモデルに対してクエリを実行するとき、またはorder_by()
を使用するとき) 。特定のQuerySet
に対してそのような順序が定義されていない場合、reverse()
を呼び出しても実際の効果はありません(reverse()
を呼び出す前に順序は未定義で、未定義のままです)その後)。
latest(field_name=None)
は、日付フィールドとして提供されたfield_nameを使用して、日付ごとにテーブル内の最新のオブジェクトを返します。この例は、
pub_date
フィールドに従って、テーブル内の最新のエントリを返します。Entry.objects.latest('pub_date')
Django> = 1.6
フィルターに一致する最初または最後のオブジェクトを返す便利なメソッドであるQuerySetメソッドfirst()およびlast()が追加されました。一致するオブジェクトがない場合はNoneを返します。
最も簡単な方法は次のとおりです。
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
をスローしません。
_AssertionError
またはProgrammingError
をスローします(pythonを-Oオプションで実行した場合)
Django 1.6以降を使用している場合、新しいAPIが導入されたため、その方がはるかに簡単になりました-
Model.object.earliest()
それは、逆方向でlatest()を提供します。
追伸-私はその古い質問を知っています。誰かがこの質問に進むと、彼らはこの新しい機能を知るようになり、古い方法を使わないように投稿します。