Djangoで降順でクエリセットからアイテムをフィルタリングする

Salman Mehmood 2023年6月20日
Djangoで降順でクエリセットからアイテムをフィルタリングする

このチュートリアルでは、Django の order_by() メソッドを使用して、クエリ セットのアイテムを降順で除外する方法を学習します。

order_by() メソッドを使用して、Django で降順のクエリ セットから項目をフィルター処理する

order_by() メソッドは結果を並べ替えます。 デフォルトの順序は、データベースに挿入したときの順序です。

デフォルトの順序を取得するとどうなるか見てみましょう。 まず、すべてのオブジェクトを取得しましょう。

simple.objects.all()

出力:

<QuerySet [<Simple:www.example.com>,<simple:www.yahoo.com>,<www.example.com>,<www.example.com>,<facebook.com>,<apple.com>]>

別の順序が必要な場合は、order_by() を使用します。 all() の代わりに order_by() を使用できます。

すべての結果に作用します。 この前にフィルターがあれば、それが最初に実行され、次に order_by() が実行されます。

次に、何を注文するかを指定する文字列を渡します。 たとえば、order_by("id") でフィルタリングすると、最小の id から開始して上に向かっていくため、同じ結果が得られます。

以下のコードを参照してください。

simple.objects.order_by("id")

出力:

<QuerySet [<Simple:www.example.com>,<simple:www.yahoo.com>,<www.example.com>,<example.com>,<facebook.com>,<apple.com>]>

id の前に - を使用して逆にするので、最小の ID から始めるのではなく、最大の ID から始めます。 実行すると、www.apple.com がクエリ セットの最初の項目であることがわかります。

simple.objects.order_by("-id")

出力:

<QuerySet [<apple.com>,<facebook.com>,<example.com>,<www.example.com>,<simple:www.yahoo.com>,<Simple:www.example.com>]>

他の列で order_by() を使用することもできます。

url 列があるとします。 url で並べ替える場合は、次のコードを使用できます。

simple.objects.order_by("url")

出力:

<QuerySet [<apple.com>,<Simple:example.com>,<facebook.com>,<www.example.com>,<www.example.com>,<simple:www.yahoo.com>]>

これは文字列フィールドなので、アルファベット順に並べられます。 - を前に置くだけで降順でフィルタリングできます。

クエリ セットでは、最初の項目 www.yahoo.com を取得します。

simple.objects.order_by("-url")

出力:

<QuerySet [<simple:www.yahoo.com>,<www.example.com>,<www.example.com>,<facebook.com>,<Simple:example.com>,<apple.com>]>

通常、2つの列が正確な順序を持つ可能性がある場合、複数の order_by() を使用します。 2つの 10 数字といくつかの異なる数字を持つ number 列を見てみましょう。

simple.objects.order_by("number")

出力:

<QuerySet [<apple.com>,<Simple:example.com>,<facebook.com>,<www.example.com>,<www.example.com>,<simple:www.yahoo.com>]>

番号が2であるため、apple.com が最初であることがわかります。同じ行が続きます。

より厳密な順序付けを強制したい場合は、order_by() に別のオプションを追加できます。 最初に number で並べ替え、次に url で並べ替えます。

simple.objects.order_by("number", "url")

結果を制限したい場合 (最初の 3つなど)、次の構文を使用できます。

simple.objects.order_by("-id")[:3]

出力:

<QuerySet [<apple.com>,<facebook.com>,<example.com>]>

これで、降順で設定されたクエリの項目が 3つだけになりました。

著者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn